TCP与UDP
- TCP(Transmission Control Protocol):面向有连接的、可靠的流协议
- UDP(User Datagram Protocol):不具有可靠性的数据报协议
- 传输协议TCP、UDP通过接收数据中的目标端口号识别目标处理程序(80端口:httpd守护进程)
套接字(Socket)
- 应用程序利用套接字(API),可以设置对端的IP地址、端口号,并实现数据的发送和接收。
端口号
- MAC地址:识别统一链路中不同的计算机
- IP地址:识别TCP/IP网络中互联的主机和路由器
- 端口号:同一台计算机中进行通信的不同应用程序
通信识别
- TCP/IP或UDP/IP通信中通常采用5个信息来识别一个通信
- 源IP地址
- 目标IP地址
- 协议号
- 源端口号
- 目标端口号
UDP
特点
- 不提供复杂的控制机制,利用IP提供面向无连接的通信服务。
- 即使出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络堵塞的行为。
- 传输中即使丢包,UDP也不负责重发。
用途
- 包总量较少的通信(DNS、SNMP等)
- 视频、音频等多媒体通信(即时通信)
- 限定于LAN等特定网络中的应用通信
- 广播通信(广播、多播)
TCP
特点
- 充分地实现了数据传输时各种控制功能,在IP这种无连接的网络上也能够实现高可靠性的通信
- 可以进行丢包时的重发控制
- 可以对顺序乱掉的分包进行顺序控制
- 是一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费
可靠性
- 确认应答 : 在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)
- 重发控制 : 在一定时间内发送端没有收到确认应答,发送端就可以认为数据已经丢失,并进行重发。由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输。
- 重复控制 : 在目标主机已经收到数据的情况下,源主机如果重发相同的数据(ACK丢失),这时候目标主机需要识别是否已经接收数据,并对重复的数据进行丢弃处理。
- 序列号 :按顺序给发送数据的每一个字节都标上号码的编号,通过序列号(字节和字节之间的分隔)实现确认应答,重发控制和重复控制
三次握手,四次挥手
- 三次握手建立连接 : 发送SYN包作为建立连接的请求,计算MSS值(为收发双方所能接收的较小值),MTU-IP首部长度-TCP首部长度(MTU-40字节)
- 四次挥手断开连接 : 发送FIN包作为断开连接的请求
滑动窗口控制
- 窗口大小 : 无需等待确认应答而可以继续发送数据的最大值
- 实现 : 使用缓冲区(计算机内存开辟出来的一段空间),缓存窗口大小的数据(比如4个段的数据),在收到接收端的ACK后,根据序列号删除序列号之前的段数据,添加之后要发送的数据。
- 重发控制 : 发送端主机如果连续3次收到同一个确认应答,就会将其所对应的数据进行重发。
其他传输层协议
- UDP-Lite : (Lightweight User Datagram Protocol, 轻量级用户数据报协议),扩展UDP机能的一种传输层协议,提供与UDP几乎相同的功能,不过计算校验和的范围可以由应用自行决定。
- SCTP : (Stream Control Transmission Protocol, 流控制传输协议),与TCP一样,都是对一种提供数据到达与否相关可靠性的检查的传输层协议。在SCTP的情况下,可以管理多个IP地址使其同时进行通信,因此即使出现通信过程当中以太网与无线LAN之间的切换,也能够保持通信不中断。
- DCCP : (Datagram Congestion Control Protocol, 数据报拥塞控制协议),辅助UDP的传输层协议弥补UDP没有拥塞控制机制的不足。
术语
- ACK(Positive Acknowledgement): 意指已经接受到
- NACK(Nactive Acknowledgement): 否定确认应答
- MSS(Maximum Segment Size): 最大消息长度