摘自https://www.cnblogs.com/whgk/p/6118206.html
通过mac地址可以找到对应的主机,怎么找到主机应用进程呢,
有一个东西来标识他,---端口
端口
占有16位,主机间的通讯,也就是应用进程间的通讯,都要依靠端口,一个进程对应一个端口,
熟知端口:0--1023,一些固定的端口
登记端口:1024--49151, 系统引用
客户端端口:49152--65535, 客户端应用
UDP 协议
User Datagram Protocol 用户数据报协议
无连接,不可靠
无连接:通讯前不需要建立连接,直接传输数据
不可靠:没有确认机制,没有超时和重传功能,如果丢失,会发送一个ICMP差错报文给源主机
UDP 首部
源端口号: 占16位,源主机的应用进程所使用的端口号
目标端口号:占16位
UDP报长度
检验号:
UDP伪首部
使用UDP协议的例子
1.DNS,就是根据域名解析ip地址的一个协议,他使用的就是UDP
2,DHCP,这个是给各电脑分配IP地址的协议,其中用的也是UDP协议
3,IGMP,我们说的多播,也就是使用的UDP,
TCP协议
面向连接的: 确认机制使双方确认互连
可靠传输:确认机制,失效则重发
有流量控制:客户端缓存过大时,服务端发送窗口减小
堵塞控制: 网络拥塞时,服务端发送窗口减小,
面向字节流传输
TCP报文结构
源端口号
目标端口号
序列号: 所传分组数据的位置
确认应答:
首部长度
保留
控制位:
URG:紧急,传送到目标主机不用排队
ACK:确认,当=1为确认=0为无效
PSH:推送.=1 减少数据向上交付
RST:复位.报文严重错误,会RST=1,然后释放连接
SYN:同步,在进行连接的时候,就三次握手用的到
FIN:终止,在释放连接时
窗口:用来控制对方发送的数据量
检验和:检验首部和数据这两部分
选项:长度可变
填充:就是为了让其成为整数个字节
可靠传
数据编号::将每个字节进行编号
累积确认:服务器端收到一个字节就发一个确认,那样效率太低,而是当收到4,5个时在发送一个确认
滑动窗口:
超时重传时间:
快速重传:
流量控制
在传输层中,有接收缓存和发送缓存,每次发送数据会携带,如果对象缓存快满,会告诉自己,少发点数据,让对方有缓冲的机会,不会导致缓存溢出,不让自己的报文被丢弃
拥塞控制
当检测到网络拥塞,
释放连接四次挥手
第一次挥手:从ESTABLISHED变为主动关闭状态,客户端主动发送释放连接骑牛给服务端,FIN=1,发送完后变为FIN_WAIT_1状态
第二次挥手:服务器收到释放链接状态后,状态变为CLOSE_WAIT,然后发送确认报文给客户端,客户端收到确认后进入FIN_WAIT_2状态,
第三次挥手:服务器端所有数据发送完,向客户端发送释放连接报文,自己进入LAST_WAIT状态,也就是等待客户端确认状态
第四次挥手:客户端收到释放连接报文后发送确认报文,自己变为TIME_WAIT,服务端收到确认报文,进入CLOSE状态,客户端稍后进入CLOSE状态