2、【网络编程】TCP报文段/网络字节序/主机字节序/网-主字节序转换函数

本文详细介绍了TCP报文段的结构,包括端口号、序号和确认序号等关键字段。同时,阐述了主机字节序和网络字节序的概念,以及它们之间的转换函数如htonl()、htons()等。
摘要由CSDN通过智能技术生成
一、TCP报文段格式

    TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两个部分。TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要增加的选项。TCP首部的最小长度是20字节,最大长度是60字节。

1、端口号

    (1)源端口:源端口和IP地址的作用是标识报文的返回地址,占16位。

    (2)目的端口:目的端口指明接收方计算机上的应用程序接口,占16位。

    TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。

2、序号和确认序号

    序号和确认号:各占32位,是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。

    e.g:一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0

3、数据偏移(首部长度)

    占4位,由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。

4、保留

    占6位,为将来定义新的用途保留,现在一般置0。

5、控制标志位

    URG ACK PSH RST SYN FIN,共6个,每个标志位占1位,每一个标志位表示一个控制功能。

    (1)URG:紧急指针标志,为1时表示紧急指针有效,为0时则忽略紧急指针。

    (2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

    (3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

    (4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求

    (5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。

    (6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

6、窗口

    滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

7、校验和

    奇偶校验,此校验和是对整个的 TCP 报文段,包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值