@@ -14,7 +14,7 @@ typora-copy-images-to: img
14
14
15
15
由于你的电脑上可能不止浏览器,还有QQ、Skype、Dropbox、邮件客户端等,不同的程序连接的别的计算机也会不同,所以,更确切地说,网络通信是两台计算机上的两个进程之间的通信。比如,浏览器进程和新浪服务器上的某个Web服务进程在通信,而QQ进程是和腾讯的某个服务器上的某个进程在通信。
16
16
17
- ![ 网络通信就是两个进程在通信] ( http://www.liaoxuefeng.com/files/attachments/001410431109632625c95355ed54fbb97e3370ad246a37f000 )
17
+ ![ 网络通信就是两个进程在通信] ( img/网络编程_01.png )
18
18
19
19
## 1.1 计算机网络
20
20
@@ -49,6 +49,7 @@ typora-copy-images-to: img
49
49
![ ] ( img/http协议.png )
50
50
51
51
## 1.4 网络模型7层概述
52
+
52
53
- ** 物理层**
53
54
54
55
主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
@@ -86,7 +87,7 @@ typora-copy-images-to: img
86
87
87
88
## 1.5 封包、解封包的过程
88
89
89
- ![ 封包、解封包] ( http:// img.blog.csdn.net/20150813114622900 )
90
+ ![ 封包、解封包] ( img/网络编程_02.png )
90
91
91
92
在TCP/IP协议模型的4层协议中,各层数据包封装情况如图所示。在发送数据时,将数据从最上层到最下层一次打包(加上
92
93
包头和部分尾部信息);在接收数据时,则将从数据从最下层到最上层依次拆包(去掉包头和部分尾部信息)。这些打包和
@@ -137,7 +138,7 @@ IP地址的组成:IP地址 = 网络号码+主机地址
137
138
138
139
IPV4数量已经不够分配,所以产生了IPV6。
139
140
140
- ![ ip] ( http:// img.blog.csdn.net/20150813001749567 )
141
+ ![ ip] ( img/网络编程_03.png )
141
142
142
143
## 2.3 地址解析
143
144
@@ -149,7 +150,7 @@ IPV4数量已经不够分配,所以产生了IPV6。
149
150
150
151
通过ping 127.0.0.1可以测试网络是不是通,如果不通,可能是网卡出问题了
151
152
152
- ![ ip地址] ( http://upload-images.jianshu.io/upload_images/3981391-96105ab3e9fb7cbd. png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
153
+ ![ ip地址] ( img/网络编程_04. png)
153
154
154
155
通过ping命令还可以获取到url对应的IP地址,例如获取网易新闻url(c.m.163.com)的IP地址
155
156
@@ -197,7 +198,7 @@ public class InetAddressDemo {
197
198
198
199
运行结果:
199
200
200
- ![ ip] ( http:// img.blog.csdn.net/20150813100309036 )
201
+ ![ ip] ( img/网络编程_05.png )
201
202
202
203
## 2.6 端口号
203
204
@@ -210,7 +211,7 @@ public class InetAddressDemo {
210
211
- C:有效端口:0~ 65535,其中0~ 1024系统使用或保留端口。
211
212
- D:所谓防火墙,其功能就是将发送到某程序端口的数据屏蔽掉以及将从该程序端口发出的数据也屏蔽掉。
212
213
213
- ![ 端口号] ( http:// img.blog.csdn.net/20150813100744192 )
214
+ ![ 端口号] ( img/网络编程_06.png )
214
215
215
216
## 2.7 传输协议
216
217
@@ -246,15 +247,15 @@ UDP和TCP的特点
246
247
247
248
Internet管理机构采取了在主机名后加上后缀名的方法标识一台主机,其后缀名被称为域名。
248
249
249
- ![ 域名解析] ( http:// img.blog.csdn.net/20150829110653568 )
250
+ ![ 域名解析] ( img/网络编程_07.png )
250
251
251
252
在浏览器中输入新浪的域名,DNS解析域名成IP,然后计算机再通过获取到的IP访问新浪服务器。
252
253
253
254
域名解析,最先走是本地的hosts(C:\WINDOWS\system32\drivers\etc\hosts)文件,解析失败了,才去访问DNS服务器解析、获取IP地址。
254
255
255
- ![ 域名解析] ( http://upload-images.jianshu.io/upload_images/3981391-8ae3771bf866f5dc. png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
256
+ ![ 域名解析] ( img/网络编程_08. png)
256
257
257
- ![ 域名解析] ( http://upload-images.jianshu.io/upload_images/3981391-7d5cda8d589d27d7. png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
258
+ ![ 域名解析] ( img/网络编程_09. png)
258
259
259
260
``` java
260
261
import java.net.InetAddress ;
@@ -275,7 +276,7 @@ public class IPDemo
275
276
```
276
277
运行结果
277
278
278
- ![ 域名解析] ( http://upload-images.jianshu.io/upload_images/3981391-8f5adc9b97a56021. png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
279
+ ![ 域名解析] ( img/网络编程_22. png)
279
280
280
281
应用:通过hosts文件可以屏蔽游戏网站内容弹出,例如:在hosts文件中添加,` 127.0.0.1 www.game18.com `
281
282
@@ -291,7 +292,9 @@ public class IPDemo
291
292
- 数据在两个Socket间通过IO传输
292
293
293
294
## 3.3 Socket机制图解
294
- ![ socket] ( http://img.blog.csdn.net/20150813002703365 )
295
+
296
+ ![ socket] ( img/网络编程_10.png )
297
+
295
298
# 4. UDP编程
296
299
297
300
在介绍TCP/IP结构时,提到传输层的两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是Transmission Control Protocol的简称,称为传输控制协议。
@@ -487,7 +490,7 @@ public class ReceiveDemo {
487
490
488
491
运行结果:
489
492
490
- ![ udp] ( http:// img.blog.csdn.net/20150813110258692 )
493
+ ![ udp] ( img/网络编程_11.png )
491
494
492
495
## 4.6 UDP案例
493
496
@@ -541,7 +544,7 @@ public class SendDemo {
541
544
542
545
运行结果:
543
546
544
- ![ udp] ( http:// img.blog.csdn.net/20150813110853511 )
547
+ ![ udp] ( img/网络编程_12.png )
545
548
546
549
接收端
547
550
@@ -585,7 +588,7 @@ public class ReceiveDemo {
585
588
586
589
运行结果:
587
590
588
- ![ udp] ( http:// img.blog.csdn.net/20150813110912838 )
591
+ ![ udp] ( img/网络编程_13.png )
589
592
# 5. TCP编程
590
593
591
594
TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务器端发出连接请求,每次连接的创建都需要经过“三次握手”。第一次握手,客户端向服务器端发出连接请求,等待服务器确认;第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求;第三次握手,客户端再次向服务器端发送确认信息,确认连接。
@@ -608,7 +611,7 @@ TCP协议是面向连接的通信协议,即在传输数据前先在发送端
608
611
609
612
IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。
610
613
611
- ![ internet-computers] ( http://www.liaoxuefeng.com/files/attachments/001410416110024ba5ff10ba0034fa8bfb1d5f7379bfaa6000 )
614
+ ![ internet-computers] ( img/网络编程_14.png )
612
615
613
616
TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。
614
617
@@ -624,7 +627,7 @@ TCP/IP:Transmission Control Protocol/Internet Protocol 的简写,中译名
624
627
625
628
TCP/IP 协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图:
626
629
627
- ![ tcp] ( http:// img.blog.csdn.net/20161114220922700 )
630
+ ![ tcp] ( img/网络编程_15.png )
628
631
629
632
所谓的协议就是双方进行数据传输的一种格式。
630
633
@@ -840,7 +843,7 @@ public class ClientDemo {
840
843
841
844
运行结果:
842
845
843
- ![ tcp] ( http:// img.blog.csdn.net/20150813112904193 )
846
+ ![ tcp] ( img/网络编程_16.png )
844
847
845
848
服务器端:
846
849
@@ -878,7 +881,7 @@ public class ServerDemo {
878
881
879
882
运行结果:
880
883
881
- ![ tcp] ( http:// img.blog.csdn.net/20150813112922188 )
884
+ ![ tcp] ( img/网络编程_17.png )
882
885
883
886
## 5.8 上传图片案例
884
887
@@ -974,7 +977,8 @@ public class UploadServer {
974
977
975
978
运行结果:
976
979
977
- ![ tcp] ( http://img.blog.csdn.net/20150813115506738 )
980
+ ![ tcp] ( img/网络编程_18.png )
981
+
978
982
## 5.9 TCP传输容易出现的问题
979
983
980
984
- 客户端连接上服务端,两端都在等待,没有任何数据传输
@@ -1005,7 +1009,7 @@ TCP 协议是面向连接、保证高可靠性(数据无丢失、数据无失序
1005
1009
1006
1010
上面的过程如下图所示:
1007
1011
1008
- ![ tcp] ( http:// img.blog.csdn.net/20161114221630097 )
1012
+ ![ tcp] ( img/网络编程_19.png )
1009
1013
1010
1014
![ ] ( img/三次握手.png )
1011
1015
@@ -1051,7 +1055,9 @@ TCP 协议是面向连接、保证高可靠性(数据无丢失、数据无失序
1051
1055
最常见的客户端:浏览器,IE/chrome
1052
1056
最常见的服务端:服务器,Tomcat
1053
1057
## 8.2 常见网络结构
1054
- ![ 网络结构] ( http://img.blog.csdn.net/20150829114738000 )
1058
+
1059
+ ![ 网络结构] ( img/网络编程_20.png )
1060
+
1055
1061
## 8.3 URL和URI
1056
1062
1057
1063
### URI:统一资源标识符
@@ -1083,7 +1089,7 @@ TCP连接的三次握手分别为:
1083
1089
1084
1090
SYN相当于询问的标志,ACK相当于回复的标志。
1085
1091
1086
- ![ tcp] ( http:// img.blog.csdn.net/20161114221630097 )
1092
+ ![ tcp] ( img/网络编程_21.png )
1087
1093
1088
1094
![ ] ( img/三次握手.png )
1089
1095
@@ -1092,7 +1098,9 @@ SYN相当于询问的标志,ACK相当于回复的标志。
1092
1098
“已经失效了的请求报文段”大致是这样产生的:A发出第一个连接请求报文段并没有丢失,在一些网络结点上面长时间滞留,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到这个失效的报文段后,就误以为是A发出的又一次新的连接请求,于是就向A发出确认报文段,同意建立连接,如果不采用三次握手,那么只要B发出确认后,新的连接就建立了。
1093
1099
1094
1100
## 9.2 释放TCP连接的四次挥手
1101
+
1095
1102
由于TCP是全双工的,所以在释放TCP连接时,要双方都得单独关闭。意思就是服务器和客户端都要释放连接。原则是某一方主动关闭时,先发一个FIN报文来表示终止这个方向的连接,收到一个FIN报文就意味着这个方向不再有数据流动,但另一个方向仍可以有数据流动,当这一个方向也发送了FIN报文后,那么这一方的连接也可以关闭了。
1103
+
1096
1104
释放TCP连接相对于要复杂点,具体释放TCP连接的四次挥手流程如下:
1097
1105
1098
1106
- A发送一个FIN给B,说:我这边要传给你的数据已经传完了,我要关闭连接了。A进入FIN-WAIT-1状态,等待B确认。
@@ -1273,4 +1281,4 @@ System.out.println(decode);
1273
1281
// 没有经过encode的字符串.直接decode,会原样输出
1274
1282
String decode2 = URLDecoder . decode(url);
1275
1283
System . out. println(decode2);
1276
- ```
1284
+ ```
0 commit comments