网络通信协议

一、互联网本质

    互联网本质就是一系列的协议,总称为"互联网协议"。

    互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

二、osi七层协议

    互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

                                                                       tcp/ip四层                                                                 tcp/ip五层                                                                       osi七层

【1】物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换),这一层的数据叫做比特。
【2】数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问,这一层通常还提供错误检测和纠正,以确保数据的可靠传输。
【3】网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择,Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
【4】传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的), 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组,常常把这一层数据叫做段。
【5】会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路,主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
【6】表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
【7】应用层: 是最靠近用户的OSI层,这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
各层功能简单解释

 

【1】物理层:
以太网物理层 · 调制解调器 · PLC · SONET/SDH · G.709 · 光导纤维 · 同轴电缆 · 双绞线
【2】数据链路层:
802.11 · 802.16 · Wi-Fi · WiMAX · ATM · DTM · 令牌环 · 以太网 · FDDI · 帧中继 · GPRS · EVDO · HSPA · HDLC · PPP · L2TP · ISDN
【3】网络层:
IP(IPv4 · IPv6) Internet Protocol(网络之间互连的协议)
ARP : Address Resolution Protocol即地址解析协议,实现通过IP地址得知其物理地址。
RARP :Reverse Address Resolution Protocol 反向地址转换协议允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。
ICMP :(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
ICMPv6:
IGMP :Internet 组管理协议(IGMP)是因特网协议家族中的一个组播协议,用于IP 主机向任一个直接相邻的路由器报告他们的组成员情况。
RIP : 路由信息协议(RIP)是一种在网关与主机之间交换路由选择信息的标准。
OSPF : (Open Shortest Path First开放式最短路径优先).
BGP :(Border Gateway Protocol )边界网关协议,用来连接Internet上独立系统的路由选择协议
IS-IS:(Intermediate System to Intermediate System Routing Protocol)中间系统到中间系统的路由选择协议.
IPsec:“Internet 协议安全性”是一种开放标准的框架结构,通过使用加密的安全服务以确保在 Internet 协议 (IP) 网络上进行保密而安全的通讯。
【4】传输层:
TCP(Transmission Control Protocol)传输控制协议
UDP (User Datagram Protocol)用户数据报协议
DCCP (Datagram Congestion Control Protocol)数据报拥塞控制协议
SCTP(STREAM CONTROL TRANSMISSION PROTOCOL)流控制传输协议
RTP(Real-time Transport Protocol或简写RTP)实时传送协议
RSVP (Resource ReSer Vation Protocol)资源预留协议
PPTP ( Point to Point Tunneling Protocol)点对点隧道协议
【5】应用层:
DHCP(动态主机分配协议)
DNS (域名解析)
FTP(File Transfer Protocol)文件传输协议
Gopher (英文原义:The Internet Gopher Protocol 中文释义:(RFC-1436)网际Gopher协议)
 HTTP (Hypertext Transfer Protocol)超文本传输协议
IMAP4 (Internet Message Access Protocol 4) 即 Internet信息访问协议的第4版本
IRC (Internet Relay Chat )网络聊天协议
NNTP (Network News Transport Protocol)RFC-977)网络新闻传输协议
XMPP 可扩展消息处理现场协议
POP3 (Post Office Protocol 3)即邮局协议的第3个版本
SIP 信令控制协议
SMTP (Simple Mail Transfer Protocol)即简单邮件传输协议
SNMP (Simple Network Management Protocol,简单网络管理协议)
SSH (Secure Shell)安全外壳协议
TELNET 远程登录协议
RPC (Remote Procedure Call Protocol)(RFC-1831)远程过程调用协议
RTCP (RTP Control Protocol)RTP 控制协议
RTSP (Real Time Streaming Protocol)实时流传输协议
TLS (Transport Layer Security Protocol)安全传输层协议
SDP( Session Description Protocol)会话描述协议
SOAP (Simple Object Access Protocol)简单对象访问协议
GTP 通用数据传输平台
STUN (Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议
NTP (Network Time Protocol)网络校时协议
各层中涉及到的简单协议

三、tcp/ip五层模型

1.  物理层

    由来:孤立的计算机之间要想一起玩,就必须接入Internet,言外之间就是计算机之间必须完成组网

    功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

2. 数据链路层

    由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思

    功能:定义了电信号的分组方式

以太网协议:

  • 一组电信号构成一个数据包,叫做"帧"
  • 每一数据帧由报头(head)和数据(data)构成,最短64字节,最长1518字节,超过最大限制就分片发送

head:(固定18字节)

  • 发送者/源地址(mac地址),6字节
  • 接收者/目标地址(mac地址),6字节
  • 数据类型,6字节

data:(最短46字节,最长1500字节)

head data

 

3. 网络层

    功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

IP协议:

  • 规定网络地址的协议就叫ip协议,由它定义的地址称为ip地址
  • 作用:a)为每一台计算机分配IP地址。b)确定哪些地址在同一个子网络

ip地址:

  • 由32位2进制表示,范围:0.0.0.0--255.255.255.255

IP数据包:

  • 由head和data构成,无须为IP包定义单独的栏位,直接放入以太网包的data部分
  • head:长度20-60字节
  • data:最长为65,515字节

    由于以太网数据包的"数据(data)"部分最长只有1500字节,因此,如果ip数据包超过1500字节,则须分成多个以太网数据包,分开发送。

ARP协议:

    功能:广播的方式发送数据包,获取目标主机的mac地址

 

4. 传输层

    网络层ip用来区分子网,以太网层的mac用来区分主机,而定位到主机上的应用程序则是通过端口,端口即应用程序与网卡关联的编号

    功能: 建立端品口到端口的通信(端对端通信)

    端口:范围0-65535,0-1023为系统占用端口

TCP协议:

    TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种端点叫做套接字(socket)

    特点:可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度(1500字节),以确保单个TCP数据包不必再分割

    套接字:端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.3.4.16,而端口号为80,那么得到的套接字为192.23.4.16:80

通信:

    TCP,提供面向边接的服务,在传送数据之前必须建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的运输服务,但是正因为这样,不可避免的增加了许多的开销,比如确认,流量控制等。对应的应用层的协议主要有SMTP,TELNET,HTTP, FTP等。

全双工通信:当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方"握手"之后,TCP将在两个应用程序之间建立一个全双工(full-duplex, 双方都可以收发消息)的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。

建立连接——"三次握手"

1. TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;

2. TCP客户端进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1, 同时选择一个初始序列号 seq=x,此时,TCP客户端进程进入了SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。

3. TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该ACK=1, SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但同样要消耗一个序号。

4. TCP客户收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq= x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。

5. 当服务器收到客户端的确认后也进入ESTABLISHED状态。此后双方就可以开始通信了。

总结:客户端发出连接请求报文  ---> 服务端确认连接并发出确认报文 ---> 客户端接收确认报文,并向服务端发出确认报文

 

一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。

如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
客户端最后还要发送一次确认原因

 

释放连接——"四次挥手"

    数据传输完毕后,双方都可释放连接。即客户端主动半闭或服备端主动关闭。

1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

2. 服务器收到连接释放报文,发出确认报文,ACK=1, ack=u+1,并且带上自己的序列号seq=v,此时服务端就进入CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。

6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

总结:客户端向服务端发出释放连接报文 ---> 服务器确认并发出确认报文 ---> 服务器将数据发送完毕后,发出释放连接报文 ---> 客户端收到连接释放报文,并发出确认报文

 

MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。

第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。

第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
客户端等2MSL原因
三次握手:
TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK[1],并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接。[1] 
TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

四次挥手:
建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。
(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。[1] 
既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。
注意:
(1) “通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。[2] 
(2) 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
(3) 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。
无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。[2] 

为什么是四次挥手,是因为TCP建立的是全双工通道,你和我断了,我还是可以给你发消息的,所以你断了之后,也需要我进行断开链接,所以要进行四次挥手确认。
为什么是三次握手四次挥手

 

 如果已经建立了连接,但是客户端突然出现了故障怎么办?

    TCP设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两个小时后还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次,若一连发送10个探测报文段仍然没反应,服务器就认为客户羰出了故障,接着就关闭连接。

 UDP协议:

    不可靠传输,"报头"部分一共只有8字节,总长度不超过65,535字节,正好放进一个IP数据包

以太网头 ip头 udp头 数据

 

    UDP在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但是正是因为这样,省去很多的开销,使得它的速度比较快,比如一些对实时性要求较高的服务,就常常使用的是UDP。对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等。

5. 应用层

    功能:规定应用程序的数据格式

    例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

posted @ 2018-11-22 19:37  Ethan_Y  阅读(280)  评论(0)    收藏  举报