@@ -14,7 +14,7 @@ TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含
14
14
15
15
16
16
17
-
17
+
18
18
19
19
20
20
TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用层,这里面有http,ftp,等等我们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协议就在这个层次。第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。
@@ -27,7 +27,7 @@ TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用
27
27
28
28
29
29
30
-
30
+
31
31
32
32
33
33
上图清楚地表示了TCP/IP协议中每个层的作用,而TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层不断地封装首部与尾部,添加一些传输的信息,确保能传输到目的地。出栈的过程,数据接收方每层不断地拆除首部与尾部,得到最终传输的数据。
@@ -40,7 +40,7 @@ TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用
40
40
41
41
42
42
43
-
43
+
44
44
45
45
46
46
上图以HTTP协议为例,具体说明。
@@ -66,7 +66,7 @@ TCP/IP协议族按照层次由上到下,层层包装。最上面的是应用
66
66
67
67
#### 1.IP协议
68
68
69
- IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP ,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。
69
+ IP协议是TCP/IP协议的核心,所有的TCP,UDP,ICMP ,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。
70
70
71
71
##### 1.1 IP地址
72
72
@@ -85,7 +85,7 @@ C类IP地址:192.0.0.0~223.255.255.255
85
85
86
86
87
87
88
-
88
+
89
89
90
90
91
91
这里只介绍:八位的TTL字段。这个字段规定该数据包在穿过多少个路由之后才会被抛弃。某个IP数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。
@@ -123,7 +123,7 @@ ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分。利用
123
123
124
124
125
125
126
-
126
+
127
127
128
128
129
129
ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。
@@ -202,11 +202,11 @@ TCP是面向连接的,无论哪一方向另一方发送数据之前,都必
202
202
203
203
204
204
205
- ** 第一次握手: ** 建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN\_ SEND状态,等待服务器的确认;
205
+ ** 第一次握手: ** 建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN\_ SEND状态,等待服务器的确认;
206
206
207
- ** 第二次握手: ** 服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1\( Sequence Number+1\) ;同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN\_ RECV状态;
207
+ ** 第二次握手: ** 服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1\( Sequence Number+1\) ;同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN\_ RECV状态;
208
208
209
- ** 第三次握手: ** 客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
209
+ ** 第三次握手: ** 客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
210
210
211
211
##### 为什么要三次握手?
212
212
@@ -224,18 +224,16 @@ TCP是面向连接的,无论哪一方向另一方发送数据之前,都必
224
224
225
225
226
226
227
-
228
227
229
228
230
- ** 第一次分手:**
231
229
232
- 主机1(可以使客户端,也可以是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN\_ WAIT\_ 1状态;这表示主机1没有数据要发送给主机2了;
230
+ ** 第一次分手: ** 主机1(可以使客户端,也可以是服务器端),设置Sequence Number,向主机2发送一个FIN报文段;此时,主机1进入FIN\_ WAIT\_ 1状态;这表示主机1没有数据要发送给主机2了;
233
231
234
- ** 第二次分手: ** 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN\_ WAIT\_ 2状态;主机2告诉主机1,我“同意”你的关闭请求;
232
+ ** 第二次分手: ** 主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN\_ WAIT\_ 2状态;主机2告诉主机1,我“同意”你的关闭请求;
235
233
236
- ** 第三次分手: ** 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST\_ ACK状态;
234
+ ** 第三次分手: ** 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST\_ ACK状态;
237
235
238
- ** 第四次分手: ** 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME\_ WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
236
+ ** 第四次分手** 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME\_ WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
239
237
240
238
##### 为什么要四次分手?
241
239
@@ -269,7 +267,7 @@ MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络
269
267
270
268
271
269
272
-
270
+
273
271
274
272
275
273
从图中可以看出,B进行了三次流量控制。第一次把窗口减少到 rwnd = 300 ,第二次又减到了 rwnd = 100 ,最后减到 rwnd = 0 ,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了 ACK = 1 ,只有在ACK=1时确认号字段才有意义。
@@ -297,7 +295,7 @@ TCP为每一个连接设有一个持续计时器\(persistence timer\)。只要TC
297
295
298
296
299
297
300
-
298
+
301
299
302
300
303
301
每经过一个传输轮次,拥塞窗口 cwnd 就加倍。
@@ -356,7 +354,7 @@ TCP为每一个连接设有一个持续计时器\(persistence timer\)。只要TC
356
354
357
355
358
356
359
-
357
+
360
358
361
359
362
360
接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。
@@ -376,7 +374,7 @@ TCP为每一个连接设有一个持续计时器\(persistence timer\)。只要TC
376
374
* 当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。
377
375
* 与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
378
376
379
-
377
+
380
378
![ ] ( http://upload-images.jianshu.io/upload_images/3985563-8e0bf3c2c9554f5d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
381
379
382
380
0 commit comments