TCP/UDP协议
网络七层模型
为了使不同计算机厂家的计算机能够相互通信,以便在更大的范围内简历计算机网络有必要建立一个国际范围的网络体系机构标准。
OSI中的层 | 功能 | TCP/IP协议族 |
---|---|---|
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,ARP,BARP,MTU |
网络层 | 为数据包选择路由 | IP,ICMP,RIP,OSPF,BGP,IGMP |
传输层 | 提供端对端的接口 | TCP,UDP |
会话层 | 解除或建立与别的节点的联系 | 没有协议 |
表示层 | 数据格式化,数据加密解密,代码转换 | 没有协议 |
应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet |
低三层
- 物理层: 使原始数据的比特流能在物理介质上传输(比较原始的电信号、光信号在网线或者光纤两端进行通信)
- 数据链路层: 通过校验、确认和反馈重发等手段,行成稳定的物理链路。(把二进制数据实现校验、确认和反馈重发通过物理层传输到另外一段01010101)
- 网络层: 进行路由选择和流量控制,是互联网多节点之间传输数据的逻辑链路。(IP协议)
传输层
- 传输层: 提供可高的端口到端口的数据传输服务,它保证一个跨进程跨机器的数据传输(TCP/UDP协议就是对传输层的一个定义)
高三层
-
会话层: 负责建立、管理和中止进程之间的会话和数据交换。
-
表示层: 负责数据格式转换、数据加密与解密、压缩与解压缩等。
-
应用层: 为用户的应用提供网络服务。
(典型就是HTTP服务器,tomcat、nginx就是涵盖了高三层的具体实现)
传输控制协议 TCP
传输控制协议(TCP)是Internet一个重要的传输协议。TCP提供面向连接、可靠、有序、字节流传输服务。应用程序在使用TCP之前,必须建立TCP连接。数据报文如下图:
TCP握手与挥手机制
三次握手机制
-
三次握手机制: 即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。
整个流程如下图所示:
- 第一次握手: Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给服务端,客户端进入SYN_SEND状态,等待服务端确认。
- 第二次握手: 服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务端进入SYN_RCVD状态。
- 第三次握手: 客户端收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给服务端,服务端检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,客户端和服务端进入ESTABLISHED状态,完成三次握手,随后客户端和服务端之间可以开始传输数据了。
四次挥手机制
-
四次挥手机制: 即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
整个流程如下图所示:
-
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
附注 :
为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
- 这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
用户数据报协议 UDP
-
用户数据报协议UDP是Internet传输层协议。提供无连接、不可靠、面向报文、数据报尽力传输服务。数据报文如下图:
UDP协议的特点:
- UDP 是无连接的。即发送数据之前不需要建立连接(发送数据结束时也没有连接需要释放),因此减少了开销和发送数据之前的时延。
- UDP 使用尽最大努力交付。因此不保证可靠交付,主机不需要维持复杂的连接状态表。
- UDP 是面向报文的。发送方的 UDP 对应用程序交付下来的报文,在添加首部后就向下交付给 IP 层。应用层交给 UDP 多长的报文,UDP 就照样发送多长的报文。接受方的 UDP 对 IP 层交上来的 UDP 数据报,再去除首部后就原封不动的交付给上层的应用进程。因此,UDP 一次交付一个完整的报文。
- UDP 没有拥塞控制。因此网络出现的拥塞不会使源主机的发送速率降低。很多实时应用(IP 电话。实时视频等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许有太大的时延。UDP 的特点正好满足这些要求。
- UDP 支持一对一、一对多、多对一、多对多的交互通信。
- UDP 的头部信息开销很小,只有 8 个字节,比 TCP 的 20 个字节要小很多。
TCP和UDP比较
TCP | UDP |
---|---|
面向连接 | 无连接 |
提供可靠性保证 | 不可靠 |
慢 | 快 |
资源占用多 | 资源占用少 |