tcp/ip协议修炼心法
文章平均质量分 92
学习网络的正确姿势:先看书,再动手做实验,然后一言不合就抓包
song->_->
调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步
展开
-
tcp/ip协议学习目录
参考书籍: 《tcp/ip协议族第四版》 《计算机网络第七版》 《tcp/ip详解卷一》写在开头:tcp/ip学习目录主要是记录自己的计算机网络的学习过程,提升自己,为后期深入学习linux网络编程打下扎实的基础,同时也希望这些学习笔记也能帮助到更多像我一样的对计算机网络感兴趣,但是基础又不好的小伙伴。另外,大家在学习的时候,我的建议是结合着计算机网络相关的书籍一起看,因为在博客中只提到...原创 2018-04-26 23:14:37 · 2851 阅读 · 2 评论 -
45-DNS协议
1. DNS域名解析DNS(Domain Name System,域名系统)是一个将域名转化为IP地址的网络协议,通过域名得到对应的IP地址的过程也叫做域名解析。使用DNS服务,用户访问互联网只需通过域名就行了,而不需要去记住ip地址,这样用户可以更方便的访问互联网。2. 域名的结构通常我们在浏览器输入的网址就是一个域名,由2个或2个以上部分组成,各个部分由英文符号“.”进行分隔,例如www.baidu.com,这个域名是由三部分组成的。3. 域名的类别国际域名:.co..原创 2021-03-11 20:18:50 · 579 阅读 · 1 评论 -
44-http协议
参考资料:《Web性能权威指南》《HTTP权威指南》1. http协议概述http协议全称为超文本传输协议(HTTP,HyperText Transfer Protocol),是基于tcp协议的一个应用层协议,主要定义web浏览器和web服务器之间交换数据的过程以及数据的格式。经过不断地发展,现在http协议不仅成为了浏览器使用的通信协议,而且还成为了大部分的互联网软...原创 2018-10-02 20:51:13 · 1504 阅读 · 0 评论 -
20-1-tcp连接——初始化序列号(ISN)
1. 为什么要初始化序列号(ISN) 在前面学习tcp连接三次握手的时候,客户端和服务端在建立tcp连接时,双方都会发送SYN报文并初始化序号(ISN)。大家不妨先思考一下:为什么要在建立tcp连接时初始化序列号?如果双方在建立tcp连接时使用相同的序号又会有什么问题?2. 使用固定序列号的问题 带着这几个问题,我们通过这个例子来看一下在tcp连接建立时使用相同序号的情况,如下...原创 2018-06-02 22:15:14 · 16364 阅读 · 6 评论 -
1-ARP协议
1. ARP地址解析协议 ARP协议(Address Resolution Protocol)是一个地址解析协议,主要功能为通过目标主机的IP地址,查询目标主机的MAC地址,以保证通信的顺利进行,每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,这个表里的IP地址与MAC地址是一一对应的。2. 为什么有了IP地址还需要mac地址 平时我们在使用电脑和网络中的另一台电脑进行...原创 2018-04-20 23:18:29 · 3023 阅读 · 1 评论 -
2-TCP/IP协议
1. TCP/IP协议栈 互联网协议族(英语:Internet Protocol Suite,缩写IPS)是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。 因为该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议)...原创 2018-04-22 18:58:02 · 807 阅读 · 0 评论 -
3-ip协议
1. ip协议 ip协议主要用于相互连接到互联网的主机之间传递数据报。 ip协议是一个无连接的协议,主要为主机转发数据报进行路由寻址,在交换数据前不会建立连接,另外ip协议不保证数据正确传输,当数据到达目的地,不需要进行确认,对数据没有差错控制,因为ip协议使用的首部校验和并不包括数据部分,所以ip协议也是一个不可靠的协议。我们通过wireshark软件来看一下ip协议数据报有哪些...原创 2018-04-22 19:00:51 · 603 阅读 · 0 评论 -
4-ip协议首部分析一
版本 版本:占 4 bit,指IP协议的版本,目前的IP协议版本为IPv4和IPv6,通信的计算机双方使用的IP协议版本必须一致,目前使用广泛的是IPv4版本对应到上一篇wireshark软件中IP数据包格式中的版本信息,如下图所示: 图1-版本 注意:如果数据在传输的时候使用IPv6协议传输,而网络设备是使用IPv4协议接收,如果发现使用的IP协议版本不对,会把整个数据报丢...原创 2018-04-23 16:18:27 · 2409 阅读 · 0 评论 -
5-ip协议首部分析二
片偏移 图7-片偏移 片偏移(Fragment offset)占用13位:每次分片传输的数据之间的偏移距离,也就是某分片的数据在原数据中的相对位置,一般偏移以8字节为单位。比如:在网络层传输的ip数据报总长度最大不能超过65535字节,如果超过了,要么对ip数据报进行分片传输,否则将丢弃。 那么问题来了,为什么是以8字节为单位? 它是由IP头部格式中的“总长度(16bit)...原创 2018-04-23 22:37:56 · 2188 阅读 · 0 评论 -
6-ip协议设置区分服务
下面我们就来做一个给数据包设置区分服务字段的实验,在windows7计算机上,打开“运行”窗口,输入gpedit.msc ,然后回车 在出现的本地组策略编辑器窗口中,点击计算机配置 — Windows配置 — 基于策略的QoS — 新建策略 在出现的创建QoS策略窗口中指定策略名称test,然后指定DSCP值为8(可以随意指定),下一步 DSCP即Differen...原创 2018-04-25 12:41:17 · 2397 阅读 · 0 评论 -
7-ip数据分片实验
1. 数据分片 ip层下面的每一种数据链路层都有其特有的数据帧格式,在该数据帧格式中也定义了数据段的最大长度,也就是最大传输单元(Maximum Transmission Unit,MTU)。当一个ip数据包封装成链路层的数据帧时,该数据报的总长度(首部部分加数据部分)不能超过下面的数据链路层的MTU值,比如以太网的MTU值是1500字节,如果数据包的长度超过了数据链路层的MTU时,那么该数...原创 2018-04-25 12:46:09 · 4523 阅读 · 0 评论 -
25-tcp协议——连接复位(RST)
1. 连接复位(RST) 前面我们介绍了tcp连接建立和连接释放过程中的一些细节,那么大家有没有想过一些异常的情况:有时候也会出现无法建立tcp连接或tcp连接异常终止的情况。一般来说,导致这种情况的原因一般有很多种,比如: 1.拒绝连接请求,比如:A想和B建立tcp连接,但是A的连接请求中使用了一个不存在的端口(比如:这个端口超出65535的范围),那么B就可以发送RST报文段拒绝这...原创 2018-05-05 14:02:53 · 14410 阅读 · 4 评论 -
8-ICMP协议
1. ICMP协议 在学习ICMP协议之前,我们先来回顾下IP协议。 IP协议的缺点: 无差错报告和差错纠正机制,缺少一种为主机管理查询的机制。 数据在网络中传输必须要封装成IP数据报格式,而IP协议的特点是面向无连接,且不可靠的,可靠性由上层协议来保证,因为IP协议对于数据是尽最大努力传输到目的地的,所以对于数据在网络传输过程中出现了故障时,出错的问题定位和排除非常困难,因为I...原创 2018-04-26 00:03:50 · 1091 阅读 · 0 评论 -
9-ICMP报文种类
1. ICMP报文种类 ICMP报文的种类分为两种:一种是差错报告报文,另一种是查询报文。 对于差错报告报文来说,ICMP总是把差错报文报告给发送数据源端(源主机)。比如:主机A给主机发送一个数据,结果这个数据在网络传输过程中出错了,然后ICMP协议的机制就会返回一个差错报告给主机A(相当于把数据在传输过程中出错的信息发回给主机A)。2. 差错报告报文差错报告报文常见有以下...原创 2018-04-26 00:09:48 · 23604 阅读 · 3 评论 -
10-ICMP数据报文格式
1. ICMP数据报文格式icmp数据报文的格式如图1所示: 图1-icmp数据报文格式 类型(type):占用了8 bit位,前面我们说,是ICMP报文类型,用于标识错误类型的差错报文或者查询类型的报告报文。代码(code):占用了8 bit位,根据ICMP差错报文的类型,进一步分析错误的原因,代码值不同对应的错误也不同,例如:类型为11且代码为0,表示数据传输过程中超时了,超时...原创 2018-04-26 23:00:46 · 14840 阅读 · 2 评论 -
11-ICMP差错报告报文
前面我们在介绍ICMP报文种类的时候说过,ICMP报文的种类分为两种:一种是差错报告报文,另一种是查询报告报文。分别介绍了这两种报文的常用的类型,在这一篇中将主要介绍差错报告报文中常用的类型。1. 终点不可达 当路由器发送的数据报不能发送到指定目的地时,或者说当路由器不能够给数据报找到路由或主机不能够交付数据报时,就丢弃这个数据报,然后向发送数据报的源主机设备发回一个终点不可达数...原创 2018-04-27 09:17:34 · 31985 阅读 · 4 评论 -
12-ICMP查询报告报文
1. ICMP请求和响应 ICMP查询报告报文分为2大类:一个是request请求报文,一个是reply应答报文,类型为8就代表是请求,类型为0就代表是应答。ICMP查询报告报文: 类型为8代表请求报文 类型为0代表应答报文 代码为0:无论是请求报文还是应答报文,代码都是为0 前面已经多次介绍过校验和,标识符,序列号,这里不再说明。 数据部分:由请求报文...原创 2018-04-27 10:33:27 · 4748 阅读 · 0 评论 -
13-网络排错工具的使用
1. 网络排错工具 ping命令和tracert命令是网络中经常使用的排错工具,比如:我们在使用网络发送数据时发生了故障的时候,ICMP协议会把产生网络故障的信息发送给源点,通过这些反馈的错误信息来排除网络故障。2. ping工具的使用 图1 在图1中,就是通过ping命令向www.hao123.com网站发送了四个数据报,每个数据报32字节,数据报往返时间最短是63毫...原创 2018-04-27 18:31:36 · 1732 阅读 · 0 评论 -
14-tcp协议
1.TCP协议 传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一个面向连接,可靠的,基于字节流传输层通信的协议,也是TCP/IP协议里比较复杂的一个协议。在简化的OSI网络模型中,TCP协议是工作在传输层上的协议。2. TCP协议的特点TCP协议的特点: 1. 数据在网络中传输的时候必定要经过传输层,而TCP协议对于数据在...原创 2018-04-27 23:42:34 · 601 阅读 · 0 评论 -
15-传输层协议和应用层协议
PS:针对上一篇tcp协议中说到的端到端服务,这里我们再通过传输层协议和应用层协议之间的关系来加深端到端服务的学习和理解。1. 传输层协议和应用层层协议的关系 在应用层,我们知道有很多协议,比如常见的有http,tfp,telnet等,传输层常见的协议有tcp,udp等。通常在发送数据时,应用层是怎么来把数据发送给指定传输层的协议?而在接收数据时,传输层又是怎么把数据上交给指定...原创 2018-04-28 09:49:32 · 7683 阅读 · 0 评论 -
16-tcp首部分析一
1. tcp首部格式 在分析tcp首部之前,先来看一下tcp报文段格式,tcp协议能够实现数据分段传输,可靠传输,流量控制,网络拥塞避免等功能,tcp协议的首部比udp协议的首部字段多,因此tcp协议功能比udp协议要复杂很多,且首部长度也不固定。 tcp协议虽然是基于字节流数据的,但是tcp传输的数据单元却是报文段,一个tcp报文段分为首部和数据两部分,tcp协议的全部功能都体现在首...原创 2018-04-28 15:35:30 · 1117 阅读 · 0 评论 -
17-tcp首部分析二
首部长度 首部长度——占 4 bit,它指出 tcp 首部共有多少个4字节(即每4字节为一个单位),首部长度可以在20~60字节之间,其中这60字节中包括了固定首部和可选字段,而固定部分的长度是20字节,那么剩下的40字节就是可选字段的。 既然首部长度字段是占用4 bit位,那首部长度字段的最小值是不是可以为0000? 实际上,首部长度字段代表着tcp首部多少个单位,而每个单位是4字节...原创 2018-04-28 16:02:08 · 765 阅读 · 0 评论 -
18-tcp数据报文封装格式
图1-tcp数据报文在网络中封装格式 下图中就是我们刚才通过wireshark软件抓到的TCP数据报。 图3是259这个数据报的封装格式: 图3-tcp数据报文结构 tcp数据报中首部的各个字段分析:Transmission Control Protocol, Src Port: 51211, Dst Port: 80, Seq: 0, Len: 0 ...原创 2018-04-28 17:05:03 · 2663 阅读 · 0 评论 -
19-tcp连接建立
TCP连接建立过程 tcp协议是面向连接的可靠传输协议,使用tcp通信的计算机必须先建立连接确保双方都在,协商通信参数,比如接收端的接收窗口大小,支持的最大报文段长度(MSS)等,建立连接后双方就可以进行通信了。tcp连接的建立采用C/S方式,主动发起连接建立的应用进程是客户端,而被动等待连接建立的应用进程是服务端。tcp连接建立的整个过程被称为“三次握手”。 图1-tcp连接建立...原创 2018-04-28 23:57:09 · 848 阅读 · 2 评论 -
20-tcp连接建立实验
TCP连接建立实验 现在我们用浏览器访问一个网站,通过wireshark抓包软件来看一下计算机通信时tcp连接的建立具体过程。主机ip为10.254.3.40,我们访问以下www.hao123.com网站,ip地址为111.13.100.2。 打开wireshark抓包软件开始抓包,打开浏览器访问www.hao123.com网站后,停止抓包并过滤出tcp数据报,如图: 以...原创 2018-04-29 10:22:40 · 1738 阅读 · 0 评论 -
21-tcp连接释放
TCP连接释放过程 通常使用tcp协议进行数据通信的客户端和服务端都可以关闭连接,一般来说,都是由客户端主动发起关闭连接请求。目前来说,大多数tcp实现允许在连接释放时有两种选择:三次挥手和支持半关闭的四次挥手。 对于支持半关闭的tcp连接释放的整个过程有个很形象的叫法,即tcp四次挥手,如图1所示。 图1-tcp四次挥手 确认号是主机为了确认对方主机是否收到消息的一种机制...原创 2018-04-29 14:27:32 · 807 阅读 · 0 评论 -
22-tcp连接释放实验
我们通过R1远程登录R2设备来模拟TCP连接释放实验。 图中是在TCP连接释放实验中抓取到的tcp数据包,总共有4个,分别是:41,42,43,44。虽然wireshark抓到的tcp数据包有些不太一样,但是tcp连接释放的过程都是一样的,所以这里我们在分析时可以忽略PSH标志位。 ip地址为12.1.1.2的是R2设备,ip地址为12.1.1.1的是R1设备,当我们通过R1远...原创 2018-04-29 20:55:10 · 862 阅读 · 0 评论 -
22-1-tcp连接释放(三次挥手)
有时候,我们在抓包时会看到FIN+ACK这种数据包,即三次挥手的连接释放的数据包,这是因为现在大多数实现都允许连接终止时使用三次挥手(但是大部分情况下,都是以四次挥手的连接释放为主),因此在这里,我们对tcp连接释放三次挥手简单了解下。 图1-tcp连接释放(三次挥手) 1. 正常情况下,客户端tcp在收到客户端进程发来的关闭tcp连接命令后,就会发送一个FIN报文段把FIN标志位...原创 2018-05-01 14:14:26 · 807 阅读 · 0 评论 -
23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态
关于TIME_WAIT状态 TIME_WAIT是TCP状态转换中的一个非常重要的状态,TIME_WAIT状态的或多或少会极大的影响客户端与服务端的性能,在真实的应用场景中往往需要根据实际需求来对TIME_WAIT进行优化,因此在学习过程中有必要掌握TIME_WAIT状态。 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态? MSL(Max...原创 2018-04-30 00:37:11 · 8397 阅读 · 0 评论 -
24-tcp协议——同时关闭状态
同时关闭一般指的是已经建立tcp连接的双方,也就是说双方都是有可能同时主动执行关闭的,tcp协议也允许这样的同时关闭。 图1-同时关闭(图片来自tcp/ip详解卷一) 当应用层发出命令时,两端都会从ESTABLISHED 变为了 FIN_WAIT1 状态,这将导致双方各发了一个FIN,两个FIN经过网络传送后分别到达另一端,注意:此时两端都没有收到ACK,因此两端状态由FIN_W...原创 2018-04-30 09:02:47 · 659 阅读 · 0 评论 -
26-tcp可靠传输——停止等待协议
1. tcp可靠传输 通过前面的学习可知,网络层传输数据时是尽最大努力传输到目的地,并不保障数据的可靠传输,对于网络拥塞,延迟,数据丢失等问题没有采取有效的措施。因此我们需要一种数据可靠传输的通信方式,即tcp来实现发送端和接收端之间的可靠通信。 那么为了后面学习tcp可靠传输,先从最简单的可靠传输停止等待协议说起吧。2. 停止等待协议 什么是停止等待协议? A和B...原创 2018-04-30 18:39:39 · 5073 阅读 · 0 评论 -
27-tcp可靠传输——连续ARQ协议
前面我们所说的tcp可靠传输停止等待协议是每发送一个分组就停止发送,等待确认后再发送下一个分组,这种传输协议虽然实现了可靠传输,但是因为每发一个分组就要确认一次,使通信效率降低了,而连续ARQ协议是停止等待协议的改进版。 图1-ARQ协议 在图1中,在发送方A设置了一个大小为400字节的滑动窗口(绿色箭头表示滑动窗口),一个分组有100个字节,在发送窗口(蓝色箭头为发送窗口)中就有...原创 2018-05-01 09:01:01 · 1779 阅读 · 0 评论 -
28-tcp可靠传输——滑动窗口
前面我们在学习tcp可靠传输时,讲了停止等待和连续ARQ两种可靠传输的协议方式,其中连续ARQ协议还使用了滑动窗口来保证数据的可靠传输和通信效率,可见滑动窗口是非常重要的。 对于滑动窗口我们可以分成窗口和滑动来进行理解。 所谓窗口就是一段可以被发送或接收的字节数据,其连续范围称之为“窗口” 滑动则是这个“可以发送的范围”(也就是窗口)可以在数据的发送过程中而变化的,也就是按照...原创 2018-05-01 17:53:24 · 823 阅读 · 0 评论 -
29-tcp可靠传输——选择确认选项(SACK)
0. 为什么会有选择确认 前面讲的ARQ协议和滑动窗口协议确实保障了数据的可靠传输,随之而来的问题就是通信效率不高。因为在tcp通信时,计算机在传输连续数据第1,2,3,4分组时,中间的第2分组数据在网络中丢失了,tcp会重传最后确认的第2分组和后面的第3,4分组,导致第3,4分组被重复发送,降低了tcp性能,于是根据这种情况发展出了选择确认。1. 什么是选择确认 关于选择确认...原创 2018-05-01 21:09:02 · 7330 阅读 · 0 评论 -
30-tcp可靠传输——超时重传时间
1. 超时重传时间RTO 在前面tcp可靠传输学习中,相信大家都有体会,tcp协议之所以能保证数据到达目的地,主要有两点:一是tcp会对传输的数据进行确认,二是tcp在传输数据过程中会对丢失的数据设置一个超时计时器(超时重传时间,简称RTO)进行超时重传。对于超时计时器有以下几点要明白的: 1.当tcp发送了的发送窗口中的报文段时,就会启动这个计时器 2.当计时器超时后,tc...原创 2018-05-02 22:37:43 · 15116 阅读 · 2 评论 -
31-tcp协议——拥塞控制
1. 为什么会有流量控制 简单来说,流量控制可以让发送方根据接收方实际接收数据的能力,来控制发送的数据量,这样做的目的是为了防止发送方发送数据过于频繁,导致接收方对于大量的数据处理不过来。 tcp使用了滑动窗口来进行流量控制:一个是发送方的发送窗口,另一个是接收方的接收窗口。也就是说,当接收方在接收发送方发送的数据时,发送方发送数据的速度和接收方接收数据的速度应该达到某种平衡(在前面的...原创 2018-05-03 15:08:36 · 633 阅读 · 0 评论 -
32-tcp拥塞控制——慢开始
前面讲到了tcp在进行拥塞控制时的算法:即慢开始,拥塞避免,快速重传,快速恢复这四种算法。那么慢开始算法是如何来感知网络是否拥塞,从而进行拥塞控制的? 首先双方在建立tcp连接时,发送方会维护一个拥塞窗口(cwnd),拥塞窗口的大小是随着网络拥塞程度而动态变化的,这样的话发送方就可以根据拥塞窗口的大小来感知网络是否拥塞,从而进行拥塞控制,也就是让自己的发送窗口等于拥塞窗口。 这样做...原创 2018-05-03 22:57:59 · 1628 阅读 · 0 评论 -
33-tcp拥塞控制——拥塞避免
1. 慢开始算法的增长速率 上一篇慢启动没有介绍拥塞窗口的增量,初始设置,因为我觉得放在拥塞避免中介绍更合适,先说拥塞窗口的增量吧。我们从上一篇中的例子中的每一传输轮次的往返时间(RTT)来看拥塞窗口cwnd的大小,就会发现它的增长规律: 开始 —> cwnd = 100 经过RR1后 —> cwnd =...原创 2018-05-04 16:48:57 · 1421 阅读 · 0 评论 -
34-tcp拥塞控制——快重传和快恢复
前面讲的慢开始算法和拥塞避免算法是tcp拥塞控制早期使用的算法,后来又增加了快重传和快恢复这两个算法。1. 快重传算法 考虑这么一种情况:假设现在网络没有发生拥塞,但是发送方发送的个别数据包却在网络中某一处丢失了,而此时发送方的超时计时器超时了,又没有收到确认,在这种情况,tcp拥塞控制会误认为出现网络拥塞,然后马上把拥塞窗口cwnd减小到1(即一个mss),并启动慢开始算法,同...原创 2018-05-05 09:15:18 · 2329 阅读 · 0 评论 -
35-tcp协议——打开窗口和关闭窗口
在学习tcp拥塞控制机制的时候,我们知道,tcp为了实现流量控制会强制发送方和接收方动态的调整窗口大小,就拿发送方的发送窗口来说,当发送方在发送数据时,发送窗口变化如下图所示: 图1-发送方发送窗口变化 从图1中可知,如果窗口合拢,我们称之为窗口关闭;如果窗口张开,我们称之为窗口打开,所以我们一定要记住窗口打开和窗口关闭。同时因为发送窗口的左边沿,受到接收方的确认号的控制,因此是不...原创 2018-05-06 17:24:25 · 923 阅读 · 2 评论