加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

IP /TCP协议及握手过程和数据包格式中级详解

发布时间:2019-03-28 22:05:59 所属栏目:教程 来源:剑云锋
导读:IP地址 定义: IP被称为网际协议,是Internet上使用的一个关键的底层协议。TCP/IP是通用的通信协议,使Internet成为一个允许连接不同类型的计算机和不同操作系统的网络。 特点: IP协议具有能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要

IP路由选择过程:

IP /TCP协议及握手过程和数据包格式中级详解

TCP数据包(TCP Datagram):

传输控制协议TCP是一种提供可靠数据传输的通行协议,他在网络协议模块和TCP模块之间传输,TCP数据包分TCP包头和数据两个部分。TCP数据是被封装在IP数据包中的,和udp类似,在IP数据包的数据部分。TCP包头包含了源端口、目的端口、序列号、确认序列号、头部长度、码元比特、窗口、校验和、紧急指针、可选项、填充位和数据区,在发送数据时,应用层数据传输到传输层,加上TCP的TCP包头,数据就构成了包文。报文式网际层IP的数据,如果再加上IP首部,就构成了IP数据包。TCP包头结构定义如下:

  1. typedef struct HeadTCP{ 
  2.  WORD SourcePort ; //16位源端口号 
  3.  WORD DePort ;// 16位目的端口号 
  4.  DWORD SequenceNo ;//32位序列号 
  5.  DWORD ConfirmNo ;// 32位确认序列号 
  6.  BYTE HeadLen ; //与Flag为一个组成部分,首部长度,占4位,保留6位,6位表示,共16位 
  7.  BYTE Flag; 
  8.  WORD WndSize ; //16位窗口大小 
  9.  WORD CheckSum ; //16位校验和 
  10.  WORD UrgPrt;// 16位紧急指针 
  11.  }HeadTCP; 

TCP提供了一个完全可靠的、面向连接的、全双工的(包含两个独立且方向相反的连接)流传输服务,允许两个应用程序建立一个连接,并在全双工方向上发送数据,然后终止连接。每一个TCP连接可靠的建立并完善地终止,在终止发生前,所有数据都会被可靠地传送。

IP /TCP协议及握手过程和数据包格式中级详解

TCP比较有名的概念是3次握手,所谓3次握手指通信双方批次交换3次信息。3次握手是在数据包丢失、重复和延迟的情况下,确保通信双方信息交换确定性的充分必要条件。

TCP/IP 三次握手建立连接:

第一次握手:客户端--发送----syn包(seq=x)-----服务器--进入SYN_END状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=x),即SYN+ACK包,,此时服务器进入SYN——RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成握手,连接建立。

IP /TCP协议及握手过程和数据包格式中级详解

注:握手时,发送的包不包括数据;连接建立后,才开始正式传输数据。在主动关闭连接之前,TCP连接将会被一直保持下去。

数据传输机制:

1. 超时重传:该机制用来保证TCP传输的可靠性。

2.快速重输:发送端在收到连续的丢包信息后,立即启动重传,节约等待超时时间。

3.流量控制:TCP滑动窗流量控制。滑动窗可以是提高TCP传输效率的一种机制。

4.拥塞控制:基于整个网络考虑的,拥堵策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。

TCP四次握手断开连接:

第一次握手:主断方发送一个FIN,通知被断方:我即将关闭数据传输通道。此时主断方还可接收数据。

第二次握手:被断方收到FIN包后,发送一个ACK给主断方,确认序号为收到的序号+1(与SNK相同,一个FIN占用一个序号)。

第三次握手:被断方发送一个FIN,通知主动方:我即将关闭数据传输通道。

第四次握手:主断方收到FIN后,发送一个ACK给被断方,确认序号为收到的序号+1,通道双方断开。四次挥手完成 。

IP /TCP协议及握手过程和数据包格式中级详解

注:可靠传输服务软件都是面向数据流的。

UDP数据包:

用户数据包协议UDP是一个面向无连接的协议,采用该协议后,两个应用程序不需要建立连接,他为应用程序提供一次向的数据传输服务。UDP协议工作在网际协议模块与UDP模块之间,不提供差错恢复,不能提供数据重传,所以使用UDP协议的应用程序都比较复杂,例如DNS(域名解析服务)应用程序。UDP数据包包头结构如下:

  1. typedef struct HeadUDP { 
  2.  WORD SourcePort ;// 16位端口号 
  3.  WORD DePort ; //16位目的端口 
  4.  WORD Len;//16位UDP长度 
  5.  WORD ChkSum;// 16位UDP校验和 
  6. }HeadUDP; 

UDP数据包分为伪首部和首部两个部分。

首部包含原IP地址、目标IP地址、协议字、UDP长度、源端口、目的端口、包文长度、校验和、数据区,是为了计算和检验而设置的。

伪首部包含IP首部一些字段,其目的是让UDP两次检查数据是否正确到达目的地。使用UDP协议时,协议字为17,包文长度包括头部和数据区的总长度,最小8个字节。校验和是以16为单位,各位求补(首位为符号位)将和相加,然后再求补。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读