传输层有两个代表性的协议,TCP和UDP。TCP提供可靠的通信传输,而UDP用于让广播和细节控制交给应用的通信传输
6.1.1 传输层的定义
IP首部有一个协议字段,用来标识网络层的上一层所采用的是哪一种的传输层协议,判断数据是TCP内容还是UDP内容
6.1.2 TCP和UDP是干啥的呢?
通过IP地址可以找到目标主机的位置,TCP和UDP是用来识别数据要发送给主机上的哪个应用程序,设定了一个端口号。端口号其实类似于程序地址,通过这个端口号可以确定给哪一个应用程序使用
6.1.4 TCP和UDP哪个好?
TCP是可靠的面向有连接的通信传输,UDP虽然不可靠,但是主要用于高速传输和实时性要求搞的通信或广播,例如打IP电话,所以TCP和UDP应该按需使用
6.2.3 如何识别一个通信
- TCP/IP,UDP/IP通信中通过五个信息来识别一个通信:
- “源IP地址”,“目标IP地址”,“源端口号”,“目标端口号”,“传输协议(TCP/UDP)”。这五个只要有一个不同, 就可认为是两个不同的通信
6.3 UDP
- UDP传输不提供复杂的控制机制,它利用IP提供面向无连接的通信服务
- 优点:它的资源消耗小,传输速度快,通常音频,视频在传送时用UDP传输较多
- 缺点:UDP报文没有可靠性保证,顺序保证,和流量控制,可靠性比较差,传输过程中出现包丢失不会重发
6.4 TCP
- TCP是一种面向有连接的传输协议
- TCP充分实现数据传输过程中的各种控制,丢包可以重发,可以顺序控制
- TCP首部格式如下:
6.4.2 TCP怎么满足可靠性的?
发送数据后,接收端会返回确认应答的消息ACK。如果发送端没有收到ACK,则说明丢包了会重发
- UDP是面向无连接,而TCP是面向有连接。
- 所以TCP在通信前,需要先建立两端的连接,即三次握手
- 通信后,需要断开连接,即四次挥手
说一下三次握手?(建立连接)
- 第一次握手:客户端给服务端发送一个SYN包,假设syn=j,并进入SYN_SEND状态,等待服务端确认
- 第二次握手:服务端收到SYN包,发送ACK确认应答设置ack=j+1,同时自己也发送一个SYN包,假设syn=k,并进入SYN_RESV状态
- 第三次握手:客户端收到服务端的SYN+ACK包,向服务端发送ACK包确认应答ack=k+1,此包发送完毕双方连接完成
说一下四次挥手?(终止连接)
- 第一次挥手:客户端发送一个FIN包给服务端,用来关闭客户端到服务端数据传送
- 第二次挥手:服务端收到这个FIN包,就发送一个ACK确认应答给客户端
- 第三次挥手:服务端关闭与客户端之间的连接,发送FIN包给客户端
- 第四次挥手:客户端收到后,发送一个ACK应答给服务端,此时连接断开
为什么服务端的ACK和FIN包不能一起发?
- 服务器发送ACK后,可能还有数据没有处理完成,要等处理完成后才能发送FIN包