[转帖]IP /TCP协议及握手过程和数据包格式中级详解
IP /TCP协议及握手过程和数据包格式中级详解
https://www.toutiao.com/a6665292902458982926/ 写的挺好的 其实 一直没闹明白 网络好 广播地址 还有 网关地址的一些乱七八槽的关系.
IP地址
定义:
IP被称为网际协议,是Internet上使用的一个关键的底层协议。TCP/IP是通用的通信协议,使Internet成为一个允许连接不同类型的计算机和不同操作系统的网络。
特点:
IP协议具有能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另外一个地点传送二进制数据,记忆可以使用IP协议加入Internet。
要求:
为了通信的需求,连接Internet的每台计算机上都必须运行IP软件。,以便时刻准备发送或接收信息。
实质:
IP地址是由IP协议规定的,由32位的二进制数表示(IPv4)。最新的IPv6协议将IP地址升为128位,这使得IP地址更加广泛,能够很好的解决目前IP地址紧缺的情况。但是IPv6协议距离实际应用还有一段距离,目前多数操作系统和应用软件都是以32位的IP地址为基准。
组成:
32位的IP地址(IPv4)主要分为两个部分,即前缀和后缀。前缀表示计算机所属的物理网络(网络号),后缀确定该网络上的唯一一台计算机(主机号)。 即 :
IP地址=网络号+主机号
分类:
在Internet上,每一个物理网络都有一个唯一的网络号,根据网络号的不同,可以将IP地址分为5类,即A类、B类、C类、D类和E类。其中A类、B类和C类属于基本类,D类用于多播发送,E类属于保留类。各类IP地址的范围如下:
网络地址:
在IP地址中主机地址为0的表示网络地址。例如:128.111.0.0。
广播地址(全‘1’地址):
在网络号后所有为全是1的地址,表示广播地址。
回送地址:
127.0.0.1表示回送地址,也叫本机地址,用于测试。
全‘0’地址:
对应当前主机。
ABC主要类型地址保留区域:
域名系统(DNS)
域名系统是一个分布的数据库,它提供将主机名(即网址)转换成IP地址的服务。
RFC
Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件,包括了tcp/ip协议的标准文档。
端口(port)
端口(Port)包括逻辑端口和物理端口两种类型。
物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。
逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。
端口号(Port Code)
由于物理端口和逻辑端口数量较多,共(2^16-1)个,为了对端口进行区分,将每个端口进行了编号,这就是端口号。运输层的端口号分为服务端使用的端口号(0-49151[熟知端口号(0-1023)、登记端口号(1024-49151)])和客户端使用的端口号(49151-65535)。网络常用端口号 - 姜亚轲的博客 - CSDN博客
应用编程接口(API,Application Programming Interface)
API是一些预先定义的函数。常用的编程接口有socket和TLI。其功能主要包括:远程过程调用(RPC)、标准查询语言(SQL)、文件传输和信息交付等。API 可以应用于所有计算机平台和操作系统。
概要设计文档的接口部分简单,一般分为:用户接口、外部接口和内部接口三个部分。用户接口只要简述用户操作和反馈结果等;外部接口简述硬件输入输出、网络传输协议等;内部接口简述模块间传值、数据传递等即可。
数据包格式
TCP/IP协议的每层都会发送不同的数据包,常见的有IP书包,TCP数据包,UDP数据包和ICMP数据包。
IP数据包(IP Datagram):
IP数据包是在IP协议间发送的,主要在以太网与网际协议模块之间传输,提供无链接数据博爱传输。IP协议不保证数据包的发送,但最大限度的发送数据。IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP协议结构定义如下:
typedef struct HeadIP { unsigned char headerlen: 4; //首部长度,占4位 unsigned char version: 4 ; //版本,占4位 unsigned char servertype ; //服务类型,占8位,即一个字节 unsigned short totallen; //总长度,占16位 unsigned short id ; // 与idoff构成表示,共占16位,前3位是标识,后13位是片偏移 unsigned short idoff; unsigned char ttl ; //生存时间,占 8位 unsigned char proto ;//协议,占8位 unsigned short checksum ;// 首部检验和,占16位 unsigned int sourceIP ; // 源IP地址 ,占32位 unsigned int destIP ;// 目的IP地址,占32 位 }HeadIP;
注:理论上,IP数据包的最大长度时655535字节,这是由IP首部16位总长度字段所限制的。
IP路由选择过程:
TCP数据包(TCP Datagram):
传输控制协议TCP是一种提供可靠数据传输的通行协议,他在网络协议模块和TCP模块之间传输,TCP数据包分TCP包头和数据两个部分。TCP数据是被封装在IP数据包中的,和udp类似,在IP数据包的数据部分。TCP包头包含了源端口、目的端口、序列号、确认序列号、头部长度、码元比特、窗口、校验和、紧急指针、可选项、填充位和数据区,在发送数据时,应用层数据传输到传输层,加上TCP的TCP包头,数据就构成了包文。报文式网际层IP的数据,如果再加上IP首部,就构成了IP数据包。TCP包头结构定义如下:
typedef struct HeadTCP{ WORD SourcePort ; //16位源端口号 WORD DePort ;// 16位目的端口号 DWORD SequenceNo ;//32位序列号 DWORD ConfirmNo ;// 32位确认序列号 BYTE HeadLen ; //与Flag为一个组成部分,首部长度,占4位,保留6位,6位表示,共16位 BYTE Flag; WORD WndSize ; //16位窗口大小 WORD CheckSum ; //16位校验和 WORD UrgPrt;// 16位紧急指针 }HeadTCP;
TCP提供了一个完全可靠的、面向连接的、全双工的(包含两个独立且方向相反的连接)流传输服务,允许两个应用程序建立一个连接,并在全双工方向上发送数据,然后终止连接。每一个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状态,完成握手,连接建立。
注:握手时,发送的包不包括数据;连接建立后,才开始正式传输数据。在主动关闭连接之前,TCP连接将会被一直保持下去。
数据传输机制:
1. 超时重传:该机制用来保证TCP传输的可靠性。
2.快速重输:发送端在收到连续的丢包信息后,立即启动重传,节约等待超时时间。
3.流量控制:TCP滑动窗流量控制。滑动窗可以是提高TCP传输效率的一种机制。
4.拥塞控制:基于整个网络考虑的,拥堵策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。
TCP四次握手断开连接:
第一次握手:主断方发送一个FIN,通知被断方:我即将关闭数据传输通道。此时主断方还可接收数据。
第二次握手:被断方收到FIN包后,发送一个ACK给主断方,确认序号为收到的序号+1(与SNK相同,一个FIN占用一个序号)。
第三次握手:被断方发送一个FIN,通知主动方:我即将关闭数据传输通道。
第四次握手:主断方收到FIN后,发送一个ACK给被断方,确认序号为收到的序号+1,通道双方断开。四次挥手完成。
注:可靠传输服务软件都是面向数据流的。
UDP数据包:
用户数据包协议UDP是一个面向无连接的协议,采用该协议后,两个应用程序不需要建立连接,他为应用程序提供一次向的数据传输服务。UDP协议工作在网际协议模块与UDP模块之间,不提供差错恢复,不能提供数据重传,所以使用UDP协议的应用程序都比较复杂,例如DNS(域名解析服务)应用程序。UDP数据包包头结构如下:
typedef struct HeadUDP { WORD SourcePort ;// 16位端口号 WORD DePort ; //16位目的端口 WORD Len;//16位UDP长度 WORD ChkSum;// 16位UDP校验和}HeadUDP;
UDP数据包分为伪首部和首部两个部分。
首部包含原IP地址、目标IP地址、协议字、UDP长度、源端口、目的端口、包文长度、校验和、数据区,是为了计算和检验而设置的。
伪首部包含IP首部一些字段,其目的是让UDP两次检查数据是否正确到达目的地。使用UDP协议时,协议字为17,包文长度包括头部和数据区的总长度,最小8个字节。校验和是以16为单位,各位求补(首位为符号位)将和相加,然后再求补。
现在的大部分系统默认提供了可读写大于8192字节的UDP数据包(使用这个默认值是因为8192是NFS读写用户数据的默认值)。因为UDP协议是误差错控制的,所以发送过程与IP协议类似,即IP分组,然后用ARP协议来解析物理地址,最后发送。
UDP网络发送和接收数据:
ICMP数据包
ICMP协议被称为网际控制包文协议。作为IP协议的附属协议,ICMP协议用来与其他主机或路由器交换错误包文和其他重要信息,可以将某个设备的故障信息发送到其他设备上。ICMP数据包包头结构如下:
typedef struct HeadICMP { BYTE Type ;//8位类型 BYTE Code; //8位代码 WORD ChkSum;// 16位校验和}HeadICMP;
本文部分内容参考至网络,如有错误,敬请指正,如有侵权,请联系修改,如有疑问,欢迎与我讨论,谢谢。
[转帖]IP /TCP协议及握手过程和数据包格式中级详解的更多相关文章
- SSL协议的握手过程
SSL握手的目的 第一,客户端与服务器需要就一组用于保护数据的算法达成一致. 第二,它们需要确立一组由那些算法所使用的加密密钥. 第三,握手还可以选择对客户端进行认证. SSL 握手概述 SSL 握手 ...
- Java网络编程学习A轮_02_抓包分析TCP三次握手过程
参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...
- SSL协议的握手过程(摘录)
SSL协议的握手过程 为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议.SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对 ...
- IP数据包格式
IP数据包格式 0 4 8 16 31 |4位版本 | 4位首部长度 | 8位服务类型 | 16位总长度(字节数)| |16位标识 | 3位标志 | 13位片偏移 | |8位生存时间| 8位协议 | ...
- ETHERNET数据包格式( IP & UDP & ICMP & ARP )
ETHERNET数据包格式( IP & UDP & ICMP & ARP ) ETHERNET数据包格式 一.ETHERNET 数据包的协议类型 TYPE 的值为 0x0800 ...
- [na]ip数据包格式
IP Datagram Structure 字段名 解释 版本 IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6. 首部长度 IP报头的长度.固定部分的长度(20字节)和可变部分的长 ...
- Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!)
Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!) 一.JDK的安装 安装位置都在同一位置(/usr/tools/jdk1.8.0_73) jdk的安装在克隆三台机器的时候可以提前安装 ...
- 【转】TCP三次握手过程
写的非常明白:http://www.cnblogs.com/rootq/articles/1377355.html TCP协议三次握手过程分析 TCP(Transmission Control Pro ...
- TCP三次握手与Tcpdump抓包分析过程
一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x (A向B发送连接请求报文段,A ...
随机推荐
- 《Java大学教程》—第4章 方法的实现
4.2~3 声明.实现.调用4.4 数据传递:实参.形参.返回值4.6 变量作用域:局部变量(区域内访问).全局变量4.7 重载:运算符重载.方法重载-->多态 1.答:P67方法(method ...
- baidu.com跳转www.baidu.com
打开git bash,输入 curl baidu.com,收到返回 <html> <meta http-equiv="refresh" content=" ...
- Jenkins+Ansible+Gitlab自动化部署三剑客-Jenkins本地搭建
后面需要shell基础,目前没有,等有了,再更
- Nginx处理请求过程
1. worker进程工作机制 现在我们了解了当我们在操作nginx的时候,nginx内部做的一些事情,那么worker进程又是如何处理请求的呢? 我们前面有提到,worker进程之间是平等的, ...
- Echarts 报错:Uncaught Error: [MODULE_MISS]"echarts/config" is not exists!
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 问题: 报错:Uncaught Error: [MODULE_MISS]" ...
- 【ES6】=>含义
=>是es6语法中的arrow function (x) => x + 6 相当于 function(x){ return x + 6; }; var ids = this.sels.ma ...
- 【mongoDB查询进阶】聚合管道(二) -- 阶段操作符
https://segmentfault.com/a/1190000010826809 什么是管道操作符(Aggregation Pipeline Operators) mongoDB有4类操作符用于 ...
- oracle expdp导出时报 ora-39070:无法打开日志文件
在通过expdp导出命令导出某个用户的对象时出现以下截图错误: ORA-39002:操作无效 ORA-39070:无法打开日志文件 ORA-39087:目录名<directory>无效 该 ...
- js 动态调用字符串方法并传入对应参数
在项目应用中,经常会需要根据业务数据需要动态去拼凑字符串,然后将字符串作为js代码进行执行. js提供eval()来支持.这里分享一个调用函数并传入需要参数的一个方法demo //动态调用自定义js方 ...
- docker学习(1)--基础概念
转载请注明源文章出处:http://www.cnblogs.com/lighten/p/6841677.html 1.前言 docker的官网:这里.下一段摘自官网描述. docker是世界领先的软件 ...