TCP/IP与UDP协议

TCP/IP协议

介绍

Transmission Control Protocol/Internet Protocol  传输控制协议/因特网互联协议
TCP/IP是一个Protocol Stack,包括TCPIPUDPICMPRIPTELNETFTPSMTPARP等许多协议 
最早发源于美国国防部(缩写为DoD)的因特网的前身ARPA网项目
TCP/IP是今天的互联网和局域网的基石和标准,共定义了四层,和ISO参考模型的分层有对应关系 
 

TCP/IP与OSI对应关系:

OSI模型对应关系

特性

工作在传输层 
面向连接协议 
全双工协议 
半关闭 
错误检查 
将数据打包成段,排序 
确认机制 
数据恢复,重传 
流量控制,滑动窗口 
拥塞控制,慢启动和拥塞避免算

端口划分

查看相关服务的端口号:Linux下的/etc/services配置文件

常用端口号:
snmp		161/tcp
http 		80/tcp 
https 		443/tcp
kerberos 	88/tcp	
smtp 		25/tcp
pop3 		110/tcp
imap 		143/tcp
smb 		445/tcp
dns			53/tcp
dhcp/s		67/udp
dhcp/c		68/udp
dns			53/udp

TCP包头结构

源端口 :源设备的应用程序端口号;
目的端口 :目标设备应用程序的端口号;
序号 :在传输层,要将数据切分为多个段,每个段有自己的序号,以便接收方接收到后根据序号组合数据,数据可切割为
	  最大约43亿个段;
确认号 :确认是否接收到数据;
数据偏移 :TCP报文的头部多长,前20位是固定的,但是有可变选项,长度可变;
保留 :空闲的空间;
URG	: 表示本报文段中发送的数据是否包含紧急数据,后面的紧急指针字段(urgent pointer)只有当URG=1是才有效;
ACK	: 表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号才有效。TCP规定,连接建立后,ACK必须为1,
	  带ACK标志的TCP报文段被称为确认报文段;
PSH : 提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间,如果为1,则表示对方应当立
	  即把数据提交给上层应用,而不是缓存起来,如果应用程序不讲接收到的数据读走,就会一直停留在TCP接收缓冲区中;
RST : 如果接收到一个RST=1的报文,说明与主机的连接出现了严重错误(主机崩溃),必须释放连接,然后再重新建立连接。
      或者说上次发送给主机的数据有问题,主机拒绝响应,带SRT标志的报文段被称为复位报文段;
SYN	: 在建立连接时使用,用来同步序号。当SYN=1ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1ACK=1时,
      表示对方同意建立连接,SYN=1,被称为同步报文段;
FIN	: 通知对方本端要关闭连接了,标记数据是否发送完毕,如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释
      放连接了”,带FIN标志的报文段被称为结束报文段;
窗口 :表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要
      ACK确认后才能继续传送后边的数据。确认的时间为窗口大小乘以一个因子就得到的多长确认一次,窗口的大小是随着
      网络负载而变化	的,不是固定的,而因子是在三次握手之后固定不变的;最大65536
校验和 :是提供额外的可靠性;
紧急指针 :标记紧急指针在数据段的位置;
选项部分 :其最大长度可根据TCP首部长度进行推算,TCP首部长度用4位表示,选项最长部分为:(2^4-1)*4-20=40字节;

TCP包头示意图:
TCP包头结构

TCP三次握手

第一次握手:当客户端主动请求(SYN-SENT)连接服务端,随机一个端口向服务端端口发起SYN=1同步序号请求,发出seq=x
 		  本机序号,
第二次握手:服务端端口随时处于监听(LISENT)状态,当发现有请求连接时,立即做出响应,这时服务器向客户端发起SYN=
		  1同步序号请求,ACK=1是确认之前序号有效(ACK=0时序号无效),并且发出服务端序号seq=y,同时发送ack=
		  x+1(表示客户端发起请求时的seq=x序号服务端收到)。
第三次握手:报文到达客户端时,客户端也立即做出响应,返回ACK=1(表示之前序号有效),seq=x+1(x序号数字之前用过一
		  次,再次发送时为+1),ack=y+1(表示服务端向客户端发起的seq=y客户端已收到)。这时双方握手完毕,可以
		  交换数据。

三次握手意义:
		客户端第一次发送请求给服务端时,服务端收到请求并返回服务端确认已收到客户端的请求
		第二次则是由服务端向客户端返回确认包已收到请求,并同时发送服务端向客户端连接的请求
		此时服务端不清楚客户端是否已收到服务端发给客户端的确认包及请求包,所以三次握手提高了可靠性
		确保双方均确认后才可以开始交换数据

连接队列:
		半连接队列:第一次客户端向服务端发起连接请求时,服务端会先查看自己的连接队列中是否还有空位去接收客服端的请求
				  当队列满时,服务端没有能力回应客户端。配置文件: /proc/sys/net/ipv4/tcp_max_syn_backlog 
		全连接队列:三次握手完成之后,服务端查看队列中是否还有空位容纳客户端,如果数量已达极限,则无法接纳其他客户端
				  配置文件: /proc/sys/net/core/somaxconn 

TCP三次握手示意图:
TCP三次握手

TCP四次挥手

第一次挥手:在连接状态下客户端向服务端发送断开连接请求FIN=1(通知对方本端要关闭连接了,标记数据是否发送完毕,
		  如果FIN=1,即告诉对方:"我的数据已经发送完毕,你可以释放连接了"),seq=u(第一次断开请求序号),此时
		  客户端进入终止等待服务器确认阶段(FIN_WAIT_1)。
第二次挥手:服务端收到FIN=1,seq=u断开连接请求后,回应客户端ACK=1(确认之前序号有效),seq=v(服务端向客户端
		  发送自己的序号),ack=u+1(表示断开请求已收到),但是此时并不是回应确认断开,只是像客户端发送,我收到
		  你的断开请求而已,此时客户端仍是等待服务器确认阶段(FIN_WAIT_2)。
第三次挥手:服务端会检查数据是否传完,如有遗留继续发送,待服务端确认所有数据完成发送之后,因为此前一段时间还是
		  数据传送阶段,所以由服务端向客户端发起请求断开连接,向客户端发送FIM=1(告知客户端以传送完毕),
		  ACK=1(再次发送此前收到的序号有效),seq=w(因为数据传送有时间间隔,所以序号改变),
		  ack=u+1(再次确认断开请求已收到),此时服务端进入最后等待阶段。
第四次挥手:客户端在两次等待后收到服务端的断开请求,立即回应ACK=1(确认序号有效),seq=u+1(第二次序号为+1),
		  ack=w+1(确认服务端seq=w收到)。过程完毕,双方挥手完成,断开连接!

TCP四次挥手示意图:
TCP四次挥手

FSM

Finite State Machine:有限状态机

三次握手:
CLOSED			没有任何连接状态
LISTEN			侦听状态,等待来自远方TCP端口的连接请求
SYN-SENT		在发送请求后,等待对方确认
SYN-RECEIVED	在接收和发送一个连接请求后,等待对方确认
ESTABLISHED 	代表传输连接建立完成,双方进入传送数据状态
四次挥手:
FIN-WAIT-1		主动关闭,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2		主动关闭,主机已接收到对方关闭传输请求,等待对方发送关闭传输请求;
TIME-WAIT		完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT		被动关闭,接收到对方发来的关闭连接请求,并已确认
LAST-ACK		被动关闭,等待最后一个关闭传输连接确认,并等待所有分钟消失
CLOSING			双方同时常是关闭传输连接,等待对方确认

#抓取状态:ss -nt | sed -nr '1!s#([^ ]+).*#\1#p' | sort | uniq -c

UDP协议

介绍

User Datagram Protocol	用户数据报协议
提供与IP一样的不可靠,无连接的交付服务,UDP报文可能出现丢失,重复或者乱序到达等现象
通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响,如QQ

特性

工作在传输层
提供不可靠的网络访问
非面向连接协议
有限的错误检查
传输性能高
无数据恢复特性

UDP包头结构

源端口:源设备的应用程序端口号
目的端口:目标设备应用程序的端口号
报文长度:整个报文大小
校验和:是提供额外的可靠性
数据:具体要传送的数据内容

UDP包头示意图:
UDP包头示意

TCP、UDP区别

连接:

	TCP面向连接

	UDP是无连接的,即发送数据之前不需要建立连接
安全:
	TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达
	UDP尽最大努力交付,即不保证可靠交付
传输效率:
	TCP传输效率相对较低
	UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信
连接对象数量:
	TCP连接只能是点到点、一对一的
	UDP支持一对一,一对多,多对一和多对多的交互通信
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值