计算机网络

Posted by Chejdj Blog on March 13, 2018

TCP的三次握手理解 传输层

简介: 客户端向服务器TCP发送一个特殊的TCP报文段,里面SYN标志位置为1,并且随机选择一个初始序号,服务器接收到该报文段,为该tcp连接分配内存和变量,并且向客户端发送允许连接的报文段ACK,同时包里面的SYN置为1,发送自己随机选取的初始序号,客户端接受到ACK,客户端也为该连接分配内存和变量,向服务器发送确认允许连接。

三次握手的意义: TCP是双向连接的,按道理TCP应该是四次握手,只是他把对于客户端的确认和服务器发起请求放在一起。详情可见TCP连接分开的时候是4次消息

拥塞控制

端对端的拥塞控制:端系统通过对于网络的判断网络是否拥塞,TCP就会相应的减少其窗口长度

网络辅助的拥塞控制: 网络构件向发送方提供关于网络拥塞状态的显示反馈信息

TCP拥塞控制: 让每一发送方根据所感知的网络拥塞程度来限制其能向连接发送流量的速率。(TCP有一个拥塞窗口,发送方中未被确认的数据量不会超过拥塞窗口的值)
TCP拥塞控制算法:慢启动,拥塞控制,快速恢复

IP数据包分片

MTU:数据链路层最大承载的数据量

HTTP 超文本传输协议

每一个URL地址由两个部分组成:对象的服务器主机名和对象服务器的路径名
HTTP:使用TCP作为它的支撑运输协议,这是一种无状态的协议,服务器并不保存客户端的状态信息
HTTP: 非持续连接和持续连接,默认的时候是持续连接
非持续连接: 80端口发出,服务器接收到,发送对象,请求断开连接,客户端接收到文件,断开连接
持续连接:设置一个时间间隔,过了就断开连接

HTTP请求报文

请求报文由三个部分组成:请求行,请求头,请求体
请求行: 指明一下请求方法(get,post,head),主机域名,资源路径,协议版本
请求头: 说明一下 报文的信息,请求体类型,接受类型,请求体的长度啊,编码格式啊等,Cookies,User-Agent浏览器的类型版本
请求体: 存放需要发送给服务器的数据信息(GET就没有请求数据),三种数据类型
图片
在这里我们经常使用的请求方式:GET和POST区别
传递参数长度: GET发送的数据在URL中(?后面)长度最长为2048字符,post不受限制
参数类型: GET方式参数放在URL中只能是ASCII字符 而POST放在请求体里面没有限制
安全性: GET直接显示在URL上, POST不可见安全性高
应用场景:GET小规模数据,一般是从资源区请求数据,POST向资源区提交数据

例子:

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr (data,data)

第一行: 方法字段,URL字段,HTTP版本字段
第二行: 主机
第三行: 需不需要持续连接
第四行: User-agent指明向服务器发送请求的浏览器类型
第五行: 指明语言版本

HTTP相应报文

相应报文也分为三种 状态行,响应头,响应体
状态行:版本协议 和状态码,以及状态码描述
响应头: 报文的基本信息,类型,长度,接受类型,编码格式,资源最后修改时间
响应体: 数据信息,和前面请求体一样三种格式

举个例子

HTTP/1.1 200 OK
Connection: close
Date: True,09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3
Last-Modified: True, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-type; text/html
(data data data data ….)

第一行:协议版本,状态码和相应状态信息
200 请求成功
301 请求的对象已经被永久转移,新的URL定义在响应报文的location:首部中,客户软件自动获取新的URL(网站换了一个域名)
400 请求不能被服务器理解
404 被请求的文档不在服务器上
505 不支持所用的HTTP协议版本

HTTP1.1与HTTP1.0区别

引入持久连接 ,在同一个TCP连接中可以传送多个HTTP请求
如何维持持久连接的呢?Keep-Alive机制,TCP层定时发送相应的包来确定连接是否存在。
一般指定Connection 是否使用长连接,失败多少次断开连接,超时断开连接