目录
一. TCP/IP
1. 分层
物理层:
数据链路层:
网络层:
传输层:
应用层:
2. TCP/IP数据包:
关于包、帧、数据报、段、消息的概述:
3. 集线器、交换机和路由器的区别:
4. Ethernet与TCP/IP
5. 为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
二. HTTP
一个简单的网络通信:
HTTP报文格式:
HTTP请求:
HTTP响应:
常见状态码:
HTTP之URL:
HTTP:应用层协议
TCP:传输层协议
IP:网络层协议
Internet:互联网
Ethernet:以太网
TCPIP协议详解
TCP/IP协议到底在讲什么?
TCP/IP协议
图解TCP/IP详解(史上最全)
一般来说,TCP/IP是利用IP进行通信时所必须用到的协议群的统称。
互联网与TCP/IP的关系:
互联网进行通信时需要相应的网络协议,互联网的协议就是TCP/IP。
TCP/IP的四层结构:应用层、传输层、网络层、网络接口层。
处于最底层,主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
作用:实现相邻计算机节点之间比特流的透明传输,尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么。
“透明传送比特流”表示经实际电路传送后的比特流,这个电路好像是看不见的。
负责建立和管理节点间的链路。
主要功能:在物理层提供的比特流的基础上,通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输的数据链路,即提供可靠的、通过物理介质传输数据的方法。
具体工作:接收来自物理层的bit流形式的数据,并封装成帧传送到上边一层;同样也接收来自上层的数据帧,拆成bit流形式的数据转发到物理层;并且还负责处理接收端发回的确认帧的信息,以提供可靠的数据传输。
该层通常还被分为两个子层:
将数据传输到目标地址,目标地址可以是多个网络通过路由器连接而成的某个地址。因此这一层主要负责寻址和路由选择。
- 寻址:数据链路层中使用的物理地址(如MAC地址)仅解决网络内部的寻址问题。在不同子网之间通信时,为了识别和找到网络中的设备,每一子网中的设备都会被分配一个唯一的地址。由于各子网使用的物理技术可能不同,因此这个地址应当是逻辑地址(如IP地址)。
- 路由算法:当源节点和目的节点之间存在多条路径时,本层可以根据路由算法,通过网络为数据分组选择最佳路径,并将信息从最合适的路径由发送端传送到接收端。
一般地,数据链路层解决同一网络内节点之间的通信,而网络层主要解决不同子网之间的通信。例如,在广域网之间通信时,必然会遇到路由选择问题(即两节点之间可能又多条路径)。
OSI下3层的主要任务是数据通信,上3层的任务是数据处理。传输层是通信子网和资源子网的接口和桥梁,起到承上启下的作用。
由来:网络层的ip帮我们区分子网,以太网的mac帮我们找到主机,然后电脑上使用了多个应用程序,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网关关联的编号。
作用:建立端口到端口的通信。传输层提供会话层和网络层之间的传输服务,这种服务从会话层获得数据,并在必要时,对数据进行分割。然后,传输层将数据传递到网络层,并确保数据能正确无误地传送到网络层。
常见的传输层协议有:TCP、UDP。
- TCP(传输控制协议):为两台主机提供可靠的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。为了提供可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。
- UDP(用户数据报协议):UDP只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。UDP协议任何必需的可靠性必须由应用层来提供。
所有的TCP/UDP等数据都以IP数据格式传输。
TCP和UDP的区别:
TCP | UDP | |
可靠性 | 可靠、数据有序、校验、超时重传 | 不可靠 |
连接性 | 面向连接,数据传输前客户端与服务器之间要建立连接才可以传输数据(三次握手,四次挥手) | 无连接的,传送数据前不与对方建立连接,对接收到的数据也不发送确认信号 |
传输速度 | 慢 | 快 |
流量控制 | 滑动窗口机制,让发送方的发送速率不要太快,要让接收方来得及接收。 | 无 |
应用场景 | 对效率要求低,对准确性要求高 | 对效率要求高,对准确性要求低,比如视频会议 |
应用层是用户与网络,以及各种应用程序和网络之间的接口,使得用户能够与网络进行交互式联系。
应用层为用户提供的服务有:文件传输服务、远程登录服务、电子邮件服务、打印服务、网络管理服务等。上述各种服务由该层的不同应用协议和程序完成。
常见的应用层协议:
(1)运行在TCP协议上的协议:
- ① HTTP协议(HyperText Transfer Protocol):
浏览器与客户端通信所使用的协议,传输数据主要格式为HTML。HTTP协议属于应用层协议,而HTML属于表示层的协议。
- ② FTP文件传输协议(File Transfer Protocol):
传输过程可以选择二进制还是文本方式,传输时会建立两个TCP连接:发送请求时用到的控制连接和实际传输时用到的数据连接。
- ③ SMTP电子邮件协议(Simple Mail Transfer Protocol):
用来发送电子邮件。
- ④ SSH远程登录:
用于加密安全登录,比TELNET安全。
(2)运行在UDP协议上的协议:
- ① NTP网络时间协议(Network Time Protocol):
用于网络同步。
- ② DHCP动态主机配置协议(Dynamic Host Configuration Protocol):
动态配置IP地址。
(3)其他:
- DNS(Domain Name Service,域名服务):
用于完成地址查找,邮件转发等工作(运行在TCP和UDP协议上)。
- ECHO(Echo Protocol,回绕协议):
用于查错及测量应答时间(运行在TCP和UDP协议上)。
- SNMP(Simple Network Management Protocol,简单网络管理协议):
用于网络信息的收集和网络管理。
- ARP(Address Resolution Protocol,地址解析协议):
用于动态解析以太网硬件的地址。
每个分层都会对所发送的数据附加一个首部,首部中包含该层必要的信息;通常为协议提供的信息为包首部,所要发送的内容为数据。
包 | 一个概括性术语,指数据整体 |
帧 | 数据链路层中包的单位 |
数据报 | IP和UDP等网络层以上分层中包的单位 |
段 | TCP数据流中的信息 |
消息 | 应用协议中数据的单位 |
一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。
eg:网桥工作时,是以MAC头部来决定转发端口的,因此它是数据链路层的设备。
具体的有:
物理层:网卡、网线、集线器、中继器、调制解调器
数据链路层:网桥、交换机
网络层:路由器
网关工作在传输层及以上。
首先说集线器(HUB):是物理层设备,采用广播的形式来传输信息。它的作用可以理解为将一些机器连接起来组成一个局域网。
而交换机(又名交换式集线器)作用与集线器大体相同。区别是:集线器采用的是共享带宽的工作方式,而交换机是独享带宽。而路由器与以上两者有明显区别,它的作用在于连接不同的网段并且找到网络中数据传输最合适的路径。路由器是产生于交换机之后,就像交换机产生于集线器之后,所以路由器与交换机也有一定联系,不是完全独立的两种设备。路由器主要克服了交换机不能路由转发数据包的不足。
路由器与交换机的主要区别体现在以下几个方面:
① 工作层次不同
交换机工作在数据链路层,路由器工作在网络层。
② 数据转发所依据的对象不同
交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备。通过MAC地址来确定转发数据的目的地址,MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。
路由器则是利用IP地址来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络。而IP地址则通常由网络管理员或系统自动分配。
五分钟读懂TCP 协议——TCP协议简介
最底层的Ethernet协议规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信。但是以太网协议不能解决多个局域网如何互通,这个由IP协议解决。
IP协议可以连接多个局域网,IP协议定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。
路由器就是基于 IP 协议。局域网之间要靠路由器连接。路由的原理很简单。市场上所有的路由器,背后都有很多网口,要接入多根网线。路由器内部有一张路由表,规定了 A 段 IP 地址走出口一,B 段地址走出口二,……通过这套”指路牌”,实现了数据包的转发。
IP 协议只是一个地址协议,并不保证数据包的完整。如果路由器丢包(比如缓存满了,新进来的数据包就会丢失),就需要发现丢了哪一个包,以及如何重新发送这个包。这就要依靠 TCP 协议。
简单说,TCP 协议的作用是,保证数据通信的完整性和可靠性,防止丢包。
IP 数据包在以太网数据包里面,TCP 数据包在 IP 数据包里面。
发送的时候,TCP协议为每个包编号(sequence number,SEQ),以便接收的一方按照顺序还原。万一发生丢包也知道丢的是哪个包。第一个包的编号是一个随机数,嘉定第一个包为1号包,其负载长度为100字节,那么下一个包的编号就是101。
收到 TCP 数据包以后,组装还原是操作系统完成的。应用程序不会直接处理 TCP 数据包。
对于应用程序来说,不用关心数据通信的细节。除非线路异常,收到的总是完整的数据。应用程序需要的数据放在 TCP 数据包里面,有自己的格式(比如 HTTP 协议)。
TCP 并没有提供任何机制,表示原始文件的大小,这由应用层的协议来规定。比如,HTTP 协议就有一个头信息Content-Length,表示信息体的大小。对于操作系统来说,就是持续地接收 TCP 数据包,将它们按照顺序组装好,一个包都不少。
操作系统不会去处理 TCP 数据包里面的数据。一旦组装好 TCP 数据包,就把它们转交给应用程序。TCP 数据包里面有一个端口(port)参数,就是用来指定转交给监听该端口的应用程序。
应用程序收到组装好的原始数据,以浏览器为例,就会根据 HTTP 协议的Content-Length字段正确读出一段段的数据。这也意味着,一次 TCP 通信可以包括多个 HTTP 通信。
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
补充:
TCP负责发现传输问题,一有问题就发出信号,要求重新传输,知道所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
打个比方:TCP协议相当于中国邮政,用来做运输,IP协议相当于邮政编码,用来唯一标记目的地。
TCP连接:就是通过TCP协议在2台主机(两个程序)之间建立起一个数据传输通道,主机就可以通过该通道相互传送数据,TCP连接也称为Socket。
协议://域名:端口号
域名:因为IP地址不方便记忆,所以通过域名来对应IP,只要记住域名就相当于记住了IP地址。
端口号:有了TCP和IP以后,就可以实现主机之间的通信。但是一台主机可以同时运行多个应用程序,所以我们需要端口号来区分数据是属于哪一个应用程序的。
HTTP协议分析
关于HTTP协议,一篇就够了
HTTP:Hyper Text Transfer Protocol,超文本传输协议。是一个基于TCP/IP通信协议来传递数据的,属于应用层的面向对象的协议。
发请求-->建立连接-->获得网络资源-->响应请求并断开连接。
HTTP协议由HTTP请求和HTTP响应组成,当在浏览器中输入网址访问某个网站时,浏览器会将你的请求封装成一个HTTP请求发送给服务器站点,服务器接收到请求后会组织响应数据封装成一个HTTP响应返回给浏览器。
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
POST / HTTP/1.1 //请求行
HOST:www.test.com //请求头
User-Agent:Mozilla/5.0 (windows NT 6.1;rv:15.0)Gecko/20100101 Firefox/15.0
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
//空白行,代表请求头结束
name=Professional%20Ajax&publisher=Wiley //请求正文
第一部分:第一行为请求行,说明了该请求是post请求,http1.1版本。
第二部分:请求头。
第三部分:空行。
第四部分:请求数据,最后一行。
HTTP/1.1 200 OK //响应行
Date: Sun, 15 Nov 2015 11:02:04 GMT //响应头
Server: bfe/1.0.8.9
Content-Length: 2605
Content-Type: application/javascript
Cache-Control: max-age=315360000
Expires: Fri, 13 Jun 2025 09:54:00 GMT
Content-Encoding: gzip
Set-Cookie: H_PS_PSSID=2022_1438_1944_1788; path=/; domain=test.com
Connection: keep-alive
//空行,代表响应头结束
Index.html //响应正文消息主题
第一部分:状态行,由HTTP协议版本号(HTTP/1.1),状态码(200),状态消息(ok)三部分组成。
第二部分:消息报头,用来说明客户端要使用的一些附加信息。
第三部分:空行,消息报头后面的空行是必须的。
第四部分:响应正文,服务器返回给客户端的文本信息。空行后面的html部分为响应正文。
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
HTTP使用使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接,URL(Uniform Resource Locator,统一资源定位符),是一种特殊类型的URI,是互联网上用来标识某一处资源的地址。如下所示为一个普通的URL:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
解释: