TCP/IP——传输层与应用层

       今天整理一下传输层与应用层的一些重要的内容。

一、传输层

       TCP

1、tcp报文格式:
在这里插入图片描述


       源端口:标识哪个应用程序发送。
       目的端口:标识哪个应用程序接收。
       序号字段:本报文段所发送的数据的第一个字节的序号。
       确认号:上次以成功接收到的数据字节序号加1,只有ACK为一时,这个字段才有效。
       首部长度:最大60字节,最小是20字节。即段起始到数据起始的长度。
       保留:必须填0。
       URG:代表这个数据是否需要紧急传输。
       ACK:ACK=1,确认号有效;ACK=0,确认号无效。
       PSH:若PSH=1,就立刻把报文段交给应用进程。
       RST:若RST=1,说明tcp连接有问题,需要释放连接,然后重新连接。
       SYN:若SYN=1,说明这是一个连接请求或连接接受请求。
       FIN:若FIN=1,说明这是一个释放连接的请求。
       window:TCP的流量控制,这个值是接收端正期望接收的字节数。窗口最大为65535字节。
       检验字段:在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
       紧急指针:只有URG=1时,这个字段才有效。指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
       选项字段:选项表结束,无操作,最大报文段长度,窗口扩大因子,时间戳等。
       填充字段:用来补位,让整个首部长度是4字节的整数倍。
       TCP负载:可变。


2、三次握手与四次挥手。
(1)三次握手:
       第一次握手:客户端发送SYN报文,进入SYN_SENT状态。
       第二次握手:服务器接收到这个报文,回复一个ACK报文,进入SYN_RCVD 的状态。
       第三次握手:客户端收到ACK报文,会回复服务器一个ACK报文。服务器收到这个报文,双方进入连接状态。
(2)四次挥手:
       第一次挥手:客户端发送FIN报文,进入FIN_WAIT1状态。
       第二次挥手:服务器收到这个报文,回复一个ACK报文。服务端进入CLOSE_WAIT状态,客户端收到服务端的确认后,进入FIN_WAIT2状态。
       第三次挥手:服务器发送FIN报文,进入LAST_ACK 的状态。
       第四次挥手:客户端收到这个报文,回复ACK报文,客户端处于TIME_WAI 状态等待2MSL后,客户端才进入CLOSED状态。服务器收到这个报文后,就会处于进入CLOSED状态。
       注:MSL报文段最大生存时间。等待2MSL是为了防止ACK丢失,还有就是在等待2MSL时间内,客户端的IP地址加上端口与服务器的IP地址加上端口不能在使用。
       注:四次挥手无论是客户端先断开连接还是服务器断开连接都可以,不影响四次挥手。

3、tcp如何保证可靠传输
(1)三次握手
(2)合理分片
(3)超时重发
(4)确认应答
(5)校验和
(6)对失序数据重新排序
(7)丢弃重复数据
(8)流量控制,tcp连接的每一方都有一个缓冲区,因为有的主机发的快,有的发的满,为了防止快的主机让慢的主机出现缓冲区溢出。
(9)拥塞控制,当网络拥塞就减少数据发送。

       TCP粘包/拆包

       拆包:一个完整的业务会被tcp拆分多个包
       粘包:把多个小包封装成一个包

       原因:
              1、应用程序写入数据的字节大于套接字发送缓冲区的大小
              2、MSS大小的tcp分段;mss=tcp报文长度-tcp首部长度
              3、以太网的payioad大于MTU进行ip分片
       解决方案:
              1、消息定长
              2、在包尾进行特殊字符分割
              3、将消息分为消息头和消息尾
              4、使用其它复杂协议,rtmp协议。

       UDP

udp报文格式
在这里插入图片描述

       发送进程:标识哪个进程发的。2字节
       接收进程:标识哪个进程收的。2字节
       Length:UDP首部加上UDP数据的字节数,最小为8。2字节
       Checksum:覆盖UDP首部和UDP数据,是可选的。2字节
       data:udp负载,可选。变长


       TCP与UDP对比

在这里插入图片描述

三、应用层

       URI:
               统一资源标识符,用来唯一标识一个资源.
       URL:
               统一资源定位器,可以用来标识一个资源,还可以用来定位这个资源。

       一次完整的http请求

       1、域名解析。
       2、tcp3次握手。
       3、建立连接后,发送http请求。
       4、服务器响应,浏览器得到html。
       5、浏览器解析html,并请求htnl中的资源。
       6、浏览器对页面渲染,呈现给客户。

       http与https对比

在这里插入图片描述

在这里插入图片描述       注:短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
       长连接:浏览器和服务器进行多次HTTP操作,就第一次需要建立连接,之后的每次会话就不再建立新的连接,还使用第一次会话的连接。


       get与post区别

在这里插入图片描述

       注:幂等是无论是一次请求还是多次请求某一个资源时,返回的结果时一样的。
       注:GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。


常见状态码:
200成功
403收到请求,拒绝服务
404资源不存在
500服务器发生错误


       目前先整理这么多,有时间在多写点。