Skip to content

Commit fd35494

Browse files
author
jackchan1999
committed
updates
1 parent 028d404 commit fd35494

23 files changed

+31
-23
lines changed
Loading
92.7 KB
Loading
82.9 KB
Loading
46.1 KB
Loading
31.1 KB
Loading
279 KB
Loading
71.7 KB
Loading
130 KB
Loading
199 KB
Loading
15.1 KB
Loading
40.2 KB
Loading
34.8 KB
Loading
63.6 KB
Loading
44.9 KB
Loading
106 KB
Loading
35.3 KB
Loading
34.4 KB
Loading
29.2 KB
Loading
56.7 KB
Loading
103 KB
Loading
56.7 KB
Loading
13.6 KB
Loading

第8章 网络编程/网络编程.md

+31-23
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ typora-copy-images-to: img
1414

1515
由于你的电脑上可能不止浏览器,还有QQ、Skype、Dropbox、邮件客户端等,不同的程序连接的别的计算机也会不同,所以,更确切地说,网络通信是两台计算机上的两个进程之间的通信。比如,浏览器进程和新浪服务器上的某个Web服务进程在通信,而QQ进程是和腾讯的某个服务器上的某个进程在通信。
1616

17-
![网络通信就是两个进程在通信](http://www.liaoxuefeng.com/files/attachments/001410431109632625c95355ed54fbb97e3370ad246a37f000)
17+
![网络通信就是两个进程在通信](img/网络编程_01.png)
1818

1919
## 1.1 计算机网络
2020

@@ -49,6 +49,7 @@ typora-copy-images-to: img
4949
![](img/http协议.png)
5050

5151
## 1.4 网络模型7层概述
52+
5253
- **物理层**
5354

5455
主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
@@ -86,7 +87,7 @@ typora-copy-images-to: img
8687

8788
## 1.5 封包、解封包的过程
8889

89-
![封包、解封包](http://img.blog.csdn.net/20150813114622900)
90+
![封包、解封包](img/网络编程_02.png)
9091

9192
在TCP/IP协议模型的4层协议中,各层数据包封装情况如图所示。在发送数据时,将数据从最上层到最下层一次打包(加上
9293
包头和部分尾部信息);在接收数据时,则将从数据从最下层到最上层依次拆包(去掉包头和部分尾部信息)。这些打包和
@@ -137,7 +138,7 @@ IP地址的组成:IP地址 = 网络号码+主机地址
137138

138139
IPV4数量已经不够分配,所以产生了IPV6。
139140

140-
![ip](http://img.blog.csdn.net/20150813001749567)
141+
![ip](img/网络编程_03.png)
141142

142143
## 2.3 地址解析
143144

@@ -149,7 +150,7 @@ IPV4数量已经不够分配,所以产生了IPV6。
149150

150151
通过ping 127.0.0.1可以测试网络是不是通,如果不通,可能是网卡出问题了
151152

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)
153154

154155
通过ping命令还可以获取到url对应的IP地址,例如获取网易新闻url(c.m.163.com)的IP地址
155156

@@ -197,7 +198,7 @@ public class InetAddressDemo {
197198

198199
运行结果:
199200

200-
![ip](http://img.blog.csdn.net/20150813100309036)
201+
![ip](img/网络编程_05.png)
201202

202203
## 2.6 端口号
203204

@@ -210,7 +211,7 @@ public class InetAddressDemo {
210211
- C:有效端口:0~65535,其中0~1024系统使用或保留端口。
211212
- D:所谓防火墙,其功能就是将发送到某程序端口的数据屏蔽掉以及将从该程序端口发出的数据也屏蔽掉。
212213

213-
![端口号](http://img.blog.csdn.net/20150813100744192)
214+
![端口号](img/网络编程_06.png)
214215

215216
## 2.7 传输协议
216217

@@ -246,15 +247,15 @@ UDP和TCP的特点
246247

247248
Internet管理机构采取了在主机名后加上后缀名的方法标识一台主机,其后缀名被称为域名。
248249

249-
![域名解析](http://img.blog.csdn.net/20150829110653568)
250+
![域名解析](img/网络编程_07.png)
250251

251252
在浏览器中输入新浪的域名,DNS解析域名成IP,然后计算机再通过获取到的IP访问新浪服务器。
252253

253254
域名解析,最先走是本地的hosts(C:\WINDOWS\system32\drivers\etc\hosts)文件,解析失败了,才去访问DNS服务器解析、获取IP地址。
254255

255-
![域名解析](http://upload-images.jianshu.io/upload_images/3981391-8ae3771bf866f5dc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
256+
![域名解析](img/网络编程_08.png)
256257

257-
![域名解析](http://upload-images.jianshu.io/upload_images/3981391-7d5cda8d589d27d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
258+
![域名解析](img/网络编程_09.png)
258259

259260
```java
260261
import java.net.InetAddress;
@@ -275,7 +276,7 @@ public class IPDemo
275276
```
276277
运行结果
277278

278-
![域名解析](http://upload-images.jianshu.io/upload_images/3981391-8f5adc9b97a56021.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
279+
![域名解析](img/网络编程_22.png)
279280

280281
应用:通过hosts文件可以屏蔽游戏网站内容弹出,例如:在hosts文件中添加,`127.0.0.1 www.game18.com`
281282

@@ -291,7 +292,9 @@ public class IPDemo
291292
- 数据在两个Socket间通过IO传输
292293

293294
## 3.3 Socket机制图解
294-
![socket](http://img.blog.csdn.net/20150813002703365)
295+
296+
![socket](img/网络编程_10.png)
297+
295298
# 4. UDP编程
296299

297300
在介绍TCP/IP结构时,提到传输层的两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是Transmission Control Protocol的简称,称为传输控制协议。
@@ -487,7 +490,7 @@ public class ReceiveDemo {
487490

488491
运行结果:
489492

490-
![udp](http://img.blog.csdn.net/20150813110258692)
493+
![udp](img/网络编程_11.png)
491494

492495
## 4.6 UDP案例
493496

@@ -541,7 +544,7 @@ public class SendDemo {
541544

542545
运行结果:
543546

544-
![udp](http://img.blog.csdn.net/20150813110853511)
547+
![udp](img/网络编程_12.png)
545548

546549
接收端
547550

@@ -585,7 +588,7 @@ public class ReceiveDemo {
585588

586589
运行结果:
587590

588-
![udp](http://img.blog.csdn.net/20150813110912838)
591+
![udp](img/网络编程_13.png)
589592
# 5. TCP编程
590593

591594
TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由客户端向服务器端发出连接请求,每次连接的创建都需要经过“三次握手”。第一次握手,客户端向服务器端发出连接请求,等待服务器确认;第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求;第三次握手,客户端再次向服务器端发送确认信息,确认连接。
@@ -608,7 +611,7 @@ TCP协议是面向连接的通信协议,即在传输数据前先在发送端
608611

609612
IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。
610613

611-
![internet-computers](http://www.liaoxuefeng.com/files/attachments/001410416110024ba5ff10ba0034fa8bfb1d5f7379bfaa6000)
614+
![internet-computers](img/网络编程_14.png)
612615

613616
TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。
614617

@@ -624,7 +627,7 @@ TCP/IP:Transmission Control Protocol/Internet Protocol 的简写,中译名
624627

625628
TCP/IP 协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图:
626629

627-
![tcp](http://img.blog.csdn.net/20161114220922700)
630+
![tcp](img/网络编程_15.png)
628631

629632
所谓的协议就是双方进行数据传输的一种格式。
630633

@@ -840,7 +843,7 @@ public class ClientDemo {
840843

841844
运行结果:
842845

843-
![tcp](http://img.blog.csdn.net/20150813112904193)
846+
![tcp](img/网络编程_16.png)
844847

845848
服务器端:
846849

@@ -878,7 +881,7 @@ public class ServerDemo {
878881

879882
运行结果:
880883

881-
![tcp](http://img.blog.csdn.net/20150813112922188)
884+
![tcp](img/网络编程_17.png)
882885

883886
## 5.8 上传图片案例
884887

@@ -974,7 +977,8 @@ public class UploadServer {
974977

975978
运行结果:
976979

977-
![tcp](http://img.blog.csdn.net/20150813115506738)
980+
![tcp](img/网络编程_18.png)
981+
978982
## 5.9 TCP传输容易出现的问题
979983

980984
- 客户端连接上服务端,两端都在等待,没有任何数据传输
@@ -1005,7 +1009,7 @@ TCP 协议是面向连接、保证高可靠性(数据无丢失、数据无失序
10051009

10061010
上面的过程如下图所示:
10071011

1008-
![tcp](http://img.blog.csdn.net/20161114221630097)
1012+
![tcp](img/网络编程_19.png)
10091013

10101014
![](img/三次握手.png)
10111015

@@ -1051,7 +1055,9 @@ TCP 协议是面向连接、保证高可靠性(数据无丢失、数据无失序
10511055
最常见的客户端:浏览器,IE/chrome
10521056
最常见的服务端:服务器,Tomcat
10531057
## 8.2 常见网络结构
1054-
![网络结构](http://img.blog.csdn.net/20150829114738000)
1058+
1059+
![网络结构](img/网络编程_20.png)
1060+
10551061
## 8.3 URL和URI
10561062

10571063
### URI:统一资源标识符
@@ -1083,7 +1089,7 @@ TCP连接的三次握手分别为:
10831089

10841090
SYN相当于询问的标志,ACK相当于回复的标志。
10851091

1086-
![tcp](http://img.blog.csdn.net/20161114221630097)
1092+
![tcp](img/网络编程_21.png)
10871093

10881094
![](img/三次握手.png)
10891095

@@ -1092,7 +1098,9 @@ SYN相当于询问的标志,ACK相当于回复的标志。
10921098
“已经失效了的请求报文段”大致是这样产生的:A发出第一个连接请求报文段并没有丢失,在一些网络结点上面长时间滞留,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到这个失效的报文段后,就误以为是A发出的又一次新的连接请求,于是就向A发出确认报文段,同意建立连接,如果不采用三次握手,那么只要B发出确认后,新的连接就建立了。
10931099

10941100
## 9.2 释放TCP连接的四次挥手
1101+
10951102
由于TCP是全双工的,所以在释放TCP连接时,要双方都得单独关闭。意思就是服务器和客户端都要释放连接。原则是某一方主动关闭时,先发一个FIN报文来表示终止这个方向的连接,收到一个FIN报文就意味着这个方向不再有数据流动,但另一个方向仍可以有数据流动,当这一个方向也发送了FIN报文后,那么这一方的连接也可以关闭了。
1103+
10961104
释放TCP连接相对于要复杂点,具体释放TCP连接的四次挥手流程如下:
10971105

10981106
- A发送一个FIN给B,说:我这边要传给你的数据已经传完了,我要关闭连接了。A进入FIN-WAIT-1状态,等待B确认。
@@ -1273,4 +1281,4 @@ System.out.println(decode);
12731281
//没有经过encode的字符串.直接decode,会原样输出
12741282
String decode2 = URLDecoder.decode(url);
12751283
System.out.println(decode2);
1276-
```
1284+
```

0 commit comments

Comments
 (0)