TCP头部结构及说明

TCP头部结构及说明

TCP头部字段解说

Source Port(源端口)16Bit:源主机的应用程序的端口号
Destination Port(目标端口)16Bit:目标主机的应用程序的端口号
Sequence Number(序列号)32Bit:发送端发出的不同的TCP数据段的序号,数据段在网络传输时,顺序有可能会发生变化。接收端依据序列号按照正确的顺序重组数据。
Acknowledge Number(确认序列号)32Bit:用于标识接收端收到的数据段,确认序列号为成功接受的数据段的序列号加1。
Header length(TCP头部长度)6Bit:TCP头部正常情况下20Bytes,如果加Option选项,那么TCP头部最长为60Bytes。
Flags(标志位)10Bit:URG表示紧急指针,ACK表示对于SYN的确认,SYN表示Request报文,FIN字段在传输完成断开连接时使用的。
Window(窗口的大小)16Bit:表示主机的缓冲区最大是多少Bytes,最大值65525Bytes。用来进行流量控制的。
Checksum(校验和)16Bit:校验整个TCP数据段,包括TCP头部和TCP数据。发送端进行计算和记录,接收到进行验证。

转载于:https://blog.51cto.com/158573116/2299738

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RFC 中文文档资源 RFC1 主机软件 RFC2 主机软件 RFC3 文档规范 RFC4 网络时间表 RFC6 与 Bob Kahn 会话 RFC10 文档规范 RFC13 零文本长度的EOF信息 RFC16 M.I.T RFC18 IMP-IMP和主机-主机控制联接 RFC19 可用来降低有限交换节点阻塞的两条协议性的建议 RFC20 用于网络交换的 ASCII 格式 RFC21 网络会议 RFC22 主机-主机控制信息格式 RFC23 多重传送的调节信息 RFC24 文档规范 RFC25 不使用高的连接号 RFC27 文档规范 RFC28 时间标准 RFC29 响应 RFC 28 RFC30 文档规范 RFC32 关于SRI所提议的实时时钟的一些想法 RFC34 关于ARC时钟的一些初步记录摘要 RFC35 网络会议 RFC36 协议注解 RFC37 网络会议结尾等 RFC38 NWG/RFC #36 网络协议的注解 RFC40 关于未来协议的更多注解 RFC41 IMP-IMP 通讯信息 RFC42 信息数据类型 RFC43 被提议的会议 RFC45 关于未来协议的更多注解 RFC53 官方协议机构 RFC58 逻辑信息同步 RFC60 简单的 NCP 协议 RFC63 迟来的网络会议报告 RFC66 NIC - 第三级别的想法和其它噪音 RFC69 提议改变 主机/IMP 规范来消除标记 RFC71 输入错误后的再分配 RFC72 建议改变网络协议延期执行 RFC73 响应 NWG/RFC 67 RFC75 网络会议 RFC78 NCP状态报告:UCSB/RAND RFC79 圆木协议错误 RFC81 涉及信息的请求 RFC84 NWG/RFC的1-80列表 RFC85 网络工作组会议 RFC90 CCN 作为一种网络服务中心 RFC99 网络会议 RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 RFC106 用户/服务器 站点协议的网络主机问卷 RFC107 主机-主机 协议故障清除委员会的说明 RFC108 1971年2月17-19日在 Urbana 举行的 NWG 会议的人员列表 RFC124 在 RFC 107 中有印刷错误 RFC132 RFC 107 的排版错误 RFC148 RFC 123 的注释 RFC149 最好的铺设计划 RFC154 风格显示 RFC156 伊利诺斯州站点的状态: 响应 RFC 116 RFC179 连接的数字分配 RFC185 NIC 分发手册 RFC188 数据管理会议公告 RFC198 站点证明-林肯实验室 360/67 RFC204 利用报路 RFC218 改变 IMP 状态报告设备 RFC228 澄清 RFC232 网络图形会议延缓 RFC245 预定网络工作组会议 RFC246 网络图形会议 RFC256 IMPSYS 变更通知 RFC276 NIC过程 RFC285 网络图形 RFC324 RJE 协议会议 RFC335 新界面 - IMP/360 RFC348 放弃过程 RFC404 文件迁移协议的注释 RFC405 给 TIP 用户的第二封信 RFC456 UCSB 的数据重置服务 RFC457 FTP 的服务器与服务器交互 RFC496 IMP/TIP 内存更新时间表(修订版 2) RFC516 丢失消息的检测 RFC591 在 NVT ASCII UCSB和在线系统之间的实验输入映象 RFC621 “注意圣诞节的时候要把长袜挂在烟囱下面” RFC628 更深的数据语言的设计观念 RFC634 最近的网络图 RFC637 SU-DSL网络地址的更改 RFC677 双重数据库的维护 RFC692 对于IMP/HOST 协议的改动的注释 (RFCS 687 AND 690) RFC697 FTP的CWD命令 RFC698 Telnet扩展ASCII选项 RFC763 角色邮箱 RFC775 面向目录的 FTP 命令 RFC779 Telnet发送-位置选项 RFC792 Internet 控制信息协议 RFC797 位图文件格式 RFC821 简单邮件传输协议 RFC826 以太网地址转换协议或转换网络协议地址 RFC827 Exterior 网关 协议 (EGP) RFC854 Telnet协议说明书 RFC855 Telnet选项说明书 RFC856 Telnet二进制传输 RFC857 Telnet回声选项 RFC858 Telnet抑制前进选项 RFC859 Telnet状态选项 RFC860 Telnet定时标记选项 RFC861 Telnet扩展选项列表选项 RFC862 回声协议 RFC863 废除协议 RFC864 字符产生协议 RFC865 白天协议的引用 RFC866 激活用户 RFC867 白天协议 RFC868 时间协议 RFC872 局域网上的TCP协议 RFC877 IP 数据包通过公共数据网络的传输标准 RFC888 STUB Exterior Gateway Protocol RFC890 外部网关协议执行表 RFC894 IP 数据包通过以太网网络传输标准 RFC895 IP 数据包通过试验性以太网网络的传输标准 RFC896 在IPTCP internet网络中的拥塞控制 RFC903 反向地址转换协议 RFC911 BERKELEY UNIX 4.2下的EGP网关 RFC917 因特网子网 RFC918 邮局协议 RFC925 多局域网地址解决 RFC930 Telnet终端类型选项 RFC932 子网地址分配方案 RFC937 邮局协议( 版本 2) RFC948 IP 数据包通过IEEE 802.3 网络传输的两种方法 RFC949 FTP 未公开的独特命令 RFC951 引导协议(BOOTP) RFC955 朝向一个处理过程应用的传输服务 RFC962 TCP-4 的最初 RFC968 “这是开动前的黑暗” RFC974 邮件路由与域名系统 RFC975 自治联邦 RFC976 UUCP 邮件互换格式标准 RFC985 Internet 网关要求 - 起草 RFC988 主机扩展用于IP多点传送 RFC1050 RPC远程步骤呼叫协议说明书 RFC1055 在串行线路上传输IP数据报的非标准协议 RFC1057 RPC远程步骤呼叫协议说明书版本 2 RFC1073 Telnet窗口大小选项 RFC1075 远距离矢量多播选路协议 RFC1088 IP 数据包传输通过NetBIOS网络的标准 RFC1090 SMTP在X.25 RFC1091 TelnetTELNET终端类型选项 RFC1094 NFS网络文件系统协议说明书 RFC1096 Telnet X 显示定位选项 RFC1097 Telnet潜意识-信息选项 RFC1112 主机扩展用于IP多点传送 RFC1113 Internet电子邮件秘密增强第一部分- 信息加密和身份验证步骤 RFC1131 OSPF规范 RFC1132 802.2分组在IPX网络上传输的标准 RFC1134 +PPP协议:关于在点到点链路上进行多协议包传送的建议 RFC1142 OSI IS-IS 域内路由协议 RFC1144 低速串行链路上的TCPIP头部压缩 RFC1145 SNMPv2的管理模型 RFC1155 基于TCPIP网络的管理结构和标记 RFC1166 Internet数字 RFC1180 TCPIP指南 RFC1191 路径MTU探索 RFC1215 为使用SNMP定义Trap的惯例 RFC1239 试验管理系统库(MIB)到标准管理系统库(MIB)的重分配 RFC1242 基准术语用于网络互连设备 RFC1258 BSD 的远程登录 RFC1287 未来的Internet 体系结构 RFC1288 Finger用户信息协议 RFC1298 基于IPX协议的SNMP RFC1321 MD5 信息-摘要算 RFC1332 PPP Internet 协议控制协议 (IPCP) RFC1333 PPP 链接质量监控 RFC1355 网络中心数据库的保密和准确性问题 RFC1365 一种IP地址扩展提议 RFC1370 OSPF适用范围声明 RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet环境选项 RFC1413 鉴定协议 RFC1414 身份识别管理系统库(MIB) RFC1418 SNMP优于OSI RFC1420 SNMP优于IPX RFC1426 SMTP服务扩展用于8bit-多用途网际邮件扩充协议(MIME)传输 RFC1428 Internet邮件从Just-Send-8到8bit-SMTPMIME的转换 RFC1433 直接ARP RFC1445 简单网络管理协议(SNMPv2)版本 2的管理模式 RFC1454 下一代IP提议的比较 RFC1461 通过X.25多协议互连SNMP管理系统库(MIB)扩展 RFC1469 通过令牌-环局域网的IP多点传送 RFC1483 通过ATM适应层5的多协议封装 RFC1558 LDAP研究过滤器的字符串表达 RFC1571 Telnet环境选项互用性问题 RFC1590 媒体类型注册过程 RFC1591 域名系统的结构和授权 RFC1597 私有Internet的地址分配 RFC1605 SONET to Sonnet翻译 RFC1606 用IP版本9的历史观 RFC1611 DNS服务器MIB扩展 RFC1612 DNS解析器MIB扩展 RFC1618 ISDN上的PPP(点对点)协议 RFC1628 UPS 管理信息基础 RFC1633 Internet 体系结构中的综合服务概述 RFC1635 怎样使用匿名FTP RFC1636 IAB工厂关于在Internet体系结构的安全报告 -2月8-10号, 1994 RFC1643 以太网-类似界面类型的管理对象的定义 RFC1658 字符流设备使用SMIv2管理对象的定义 RFC1661 点对点协议(PPP) RFC1671 向IPng 过渡和其他考虑的白皮书 RFC1690 Internet工程与计划组(IEPG)介绍 RFC1691 康奈尔大学数字图书馆文档体系结构 RFC1696 用SMIv2定义的调制解调器MIB RFC1713 DNS调试工具 RFC1715 地址分配效率比率H RFC2002 IP移动性支持 RFC2003.txt">RFC2003 在IP内封装IP RFC2004 IP最小封装 RFC2005 IP移动性的适用性陈述 RFC2011 SNMPv2 管理信息基础用于Internet 协议使用SMIv2 RFC2012 SNMPv2 管理信息基础 用于传输控制协议使用SMIv2 RFC2013 有关采用SMIv2用户数据报协议的SNMPv2管理信息数据库 RFC2015 多用途网际邮件扩充协议(MIME)安全具有相当好的保密性(PGP) RFC2021 远程网络监控管理信息基础 版本 2使用SMIv2 RFC2025 简单公共密钥GSS-API机制(SPKM) RFC2040 RC5,
第一篇 基础知识篇  第一章 文件系统和进程系统  1.1 文件系统  1.1.1 文件系统的总体结构  1.1.2 文件结构和目录结构  1.2 文件系统的相关编程  1.3 进程系统  1.3.1 进程的概念  1.3.2 Linux中描述进程的核心数据结构。  1.3.3 和进程相关的系统调用  本章小结 第二章 进程间通信和同步  2.1 信号的处理  2.1.1 Linux中支持的信号  2.1.2 信号的捕获和处理  2.1.3 系统调用和信号的相互作用  2.1.4 pause和suspend函数  2.2 信号量  2.2.1 进程间的互斥  2.2.2 信号量的结构和信号量操作函数 . 2.2.3 应用示例  2.3 消息队列  2.3.1 消息队列的结构  2.3.2 消息队列的操作函数  2.3.3 应用示例  2.4 共享内存  2.4.1 共享内存的操作函数  2.4.2 应用示例  本章小结 第三章 TCP/IP协议  3.1 OSI参考模型、协议和服务  3.2 协议和服务  3. 2.1 TCB/IP  3.2.2 TCP和UDP的比较  3.2.3 Internet上两主机进程间通信数据的封装和解包  3.2.4 IP地址、网络地址和网络掩码  3.2.5 传输层端口  3. 3 域名系统  3.4 域名解析和名字服务器  3. 4. 1 TCP协议  3.4.2 TCP的确认和超时重发机制  3.4.3 TCP头部格式(HeaderFFormat)  3.4.4 TCP连接的状态转移过程  3.5 IP数据包格式  3.6 Internet消息控制协议  本章小结 第二篇 初级应用篇  第四章 基本套接字编程实践  4.1 基本套接字函数族  4.1.1 socket编程的基本流程  4.1.2 函数socket  4.1. 3 函数connect  4.1. 4 函数bind  4.1.5 函数listen  4.1.6 函数accept  4.1.7 函数read和write  4.1.8 函数close  4.2 应用示例  4.3 程序结果和异常说明  4.3.1 程序的运行结果  4.3. 2 程序的异常  本章小结  第五章 无阻塞套接字和单进程轮询服务器  5.1 无阻塞套接字  5.1.1 阻塞套接字的缺点  5.1. 2 阻塞和无阻塞的比较  5.1.3 无阻塞的实现  5.2 单进程轮询服务器工作方式  5. 3 应用示例  5.3.1 应用说明  5.3.2 应用源码  第六章 带外数据与多路复用、信号驱动的输入J输出模型  6.1 多路复用的输入/输出模型  6.1.1 多路复用模型的概念与select函数  6.1.2 应用示例  6.1.3 pselect函数对select的增强  6.2 信号驱动的输入/输出模型  6.3 系统I/O模型的总结  6.4 带外数据  6.4.1 带外数据的发送  6.4.2 带外数据的接收  6.4.3 带外数据接收方法的示例  本章小结  第七章 UDF数据报  7.1 UDP数据报的概述  7.2 UDP通信的过程  7.3 UDP的服务器和TCP服务器的比较  7.4 UDP的“连接”  7.5 应用示例  本章小结  第八章 域名系统和通用套接字选项  8.1 域名系统  8.1.1 域名系统的回顾  8.1.2 通过地址获取主机信息  8.1.3 通过主机名获取主机信息  8.1.4 获取本地主机的信息  8.1.5 通过服务名获取服务端口  8.1.6 通过端口号获取服务名  8.2 套接字选项  8.2.1 获取和设置套接字选项  8.2.2 通用套接字选项  本章小结 第三篇 应用提高篇  第九章 高级套接字函数编程实践  9.1 函数recv和send  9.1.1 函数send  9.1.2 函数recv  9.1.3 应用示例  9.1.4 应用源码和分析  9.2 函数readv和writev  9.2.1 函数说明  9.2.2 应用示例  9.3 函数比recvmsg和sendmsg  本章小结  第十章 守护进程和超级服务器inetd  10.1 守护进程的原理  10.2 编程实践  10.3 超级服务器inetd的工作原理  10.3.1 超级服务器的概念  10.3.2 超级服务器使用的配置文件  10.3.3 inetd处理并发服务的过程  本章小结  第十一章 数据结构的传输和xDR标准  11.1 数据结构的传送  11.1.1 数据结构传送的问题  11.1.2 简单的示例  11.2 XDR标准  11.2.1 XDR中包含的数据类型  11.2.2 XDR实现的原理  11.2.3 XDR的转换函数库  本章小结  第十二章 BPC远程过程调用原理和实践  12.1 RPC的原理  12.1.1 XDR的更进一步  12.1.2 本地函数调用的过程  12.1.3 用远程调用来虚拟本地调用  12.2 RPC的实现  12.2.1 远程过程的标识  12.2.2 端口的动态映射  12.2.3 RPC的报文  12.2.4 RPC开发工具  12.2.5 设计的原则  12.3 应用示例:网络记事本  12.3.1 编写本地应用  12.3.2 Rpcgen构建RPC应用  12.3.3 编写RPC说明文件  12.3.4 修改客户端程序  12.3.5 修改服务器端程序  12.3.6 调用的完整过程  12.3.7 程序的结果、分析和总结  本章小结 第四篇 高级编程篇  第十三章 UNIX域套接字和并发服务器的预创建技术  13.1 UNIX域套接字  13.1.1 UNIX域的地址结构  13.1.2 UNIX(套接字使用的示例  13.1.3 传递文件描述符  13.2 并发服务器的预创建技术  13.2.1 预创建固定服务器进程的数量  13.2.2 动态的管理子进程  13.2.3 重用服务器子进程  本章小结  第十四章 原始套接字编程实践  14.1 原始套接字  14.1.1 原始套接字的创建  14.1.2 原始套接字的使用  14.1.3 IP包头和ICMP报文的C语言描述  14.2 Ping应用程序  14.2.1 程序设计  14.2.2 程序源码  14.3 IP套接字选项  14.3.1 IP_TTL选项  14.3.2 IP_TOS选项  14.3.3 IP_OPTIONS选项  14.3.4 IP_HDRINCL选项  本章小结  第十五章 多线程编程  15.1 线程的概念  15.1.1 线程的概念  15.1.2 线程的分类  15.1.3 线程的创建和等待函数  15.1.4 线程的属性函数  15.2 线程间的同步  15.2.1 无名信号量  15.2.2 互斥锁、条件变量和条件信号  15.2.3 线程和信号  15.3 在网络程序中应用多线程  15.3.1 线程间参数的传递  15.3.2 线程安全函数的设计  15.3.3 多进程的并发服务器和多线程的并发服务器  15.3.4 客户端进程的多线程化  本章小结 第十六章 网络售票系统的简单模拟  16.1 系统的总体设计  16.1.1 应用的说明  16.1.2 数据格式的设计  16.1.3 服务器端的设计  16.1.4 客户端的设计  16.2 程序源码和解析  16.2.1 服务器端的源码  16.2.2 客户端的源码  本章小结
实验三 发送TCP数据包 实验目的: 设计一个发送TCP数据包的程序,并根据本设计说明TCP数据包的结构以及TCP协议与 IP协议的关系,使大家对TCP协议的工作原理有更深入的认识。 实验要求: 本程序的功能是填充一个TCP数据包,并发送给目的主机。 以命令行形式运行:SendTCP source_ip source_port dest_ip dest_port 其中SendTCP为程序名;source_ip为源IP地址; source_port为源端口; dest_ip为目的IP地址; dest_port为目的端口。 其他的TCP头部参数自行设定。 数据字段为"This is my homework of network!". 成功发送后在屏幕上输出"send OK"。 课程设计分析: 使用原始套接字 定义IP头部TCP头部和伪头部的数据结构 填充数据包 发送数据包 设计思想: 本课程设计的目标是发送一个TCP数据包,可以利用原始套接字来完成这个工作。整个程 序由初始化原始套接字和发送TCP数据包两个部分组成。 创建一个原始套接字,并设置IP头选项 SOCKET sock; sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 或者: sock=WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED); 设置SOCK_RAW标志,表示我们声明的是一个原始套接字类型。 为使用发送接收超时设置,必须将标志位置位置为WSA_FLAG_OVERLAPPED。在本课程设计 中,发送TCP包时隐藏了自己的IP地址,因此我们要自己填充IP头,设置IP头操作选项。 其中flag设置为ture,并设定 IP_HDRINCL 选项,表明自己来构造IP头。注意,如果设置IP_HDRINCL 选项,那么必须具有 administrator权限,要不就必须修改注册表: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameter\ 修改键:DisableRawSecurity(类型为DWORD),把值修改为 1。如果没有,就添加。 BOOL Flag=TRUE; setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag)); int timeout=1000; setsockopt(sock, SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, sizeof(timeout)); 在这里我们使用基本套接字SOL_SOCKET,设置SO_SNDTIMEO表示使用发送超时设置,超时 时间设置为1000ms。 构造IP头和TCP头 这里, IP头和TCP头以及TCP伪部的构造请参考下面它们的数据结构。 计算校验和的子函数 在填充数据包的过程中,需要调用计算校验和的函数checksum两次,分别用于校验IP头 和TCP头部(加上伪头部),其实现代码如下: USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=0; while(size >1) { cksum+=*buffer++; size -=sizeof(USHORT); } if(size ) { cksum += *(UCHAR*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16); return (USHORT)(~cksum); } 程序流程图: 源程序代码: #include <stdio.h> #include <winsock2.h> #include <ws2tcpip.h> #include <time.h> #include <windows.h> #include <string.h> #include <stdlib.h> #include <iostream.h> #pragma comment(lib,"ws2_32.lib") #define IPVER 4 //IP协议预定 #define MAX_BUFF_LEN 65500 //发送缓冲区最大值 typedef struct ip_hdr //定义IP首部 { UCHAR h_verlen; //4位首部长度,4位IP版本号 UCHAR tos; //8位服务类型TOS USHORT total_len; //16位总长度(字节) USHORT ident; //16

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值