TCP/IP

TCP/IP是利用IP进行通信是所必须用到的协议群的统称,包括IP、ICMP、DNS、ARP、TCP、UDP、FTP、HTTP等,他们与TCP、IP关系紧密,故有时也称为TCP/IP网际协议族。其具有两大特点:具有开放性、注重实用性。其标准化的协议,被列入RFC文档并公布。互联网协议=TCP/IP。

TCP/IP分层模型与通信示例

在每个分层中,都会对所发送的数据附加一个首部,TCP包首部、IP包首部、以太网包首部,网络中传输的数据包由两部分组成:协议所要用到的首部、上层传过来的数据。另外,每个分层的包首部汇总还含有一个识别位,用来标示上一层协议的种类信息。

甲给乙发送电子邮件“早上好”

  1. 应用程序处理:进行编码处理(如UTF-8编码),并由应用判断何时发送数据建立TCP连接。
  2. TCP模块的处理:在应用层数据的前端附加一个TCP首部,包含源端口号、目标端口号、序号以及校验和,再发给IP,提供将应用层发来的数据发送至对端的可靠传输。
  3. IP模块的处理:IP将TCP传过来的数据包当做数据,并在TCP首都的前端加上自己的IP首部,包含发送端IP地址和接收端IP地址等。参考路由控制表决定接手此IP包的路由或主机,并发给下一节点的驱动程序。此时要知道接收端的MAC地址,以将MAC地址和IP地址交给以太网的驱动程序,可以利用ARP查找。
  4. 网络接口(以太网驱动)的处理: 给从IP传过来的IP包加上以太网包首部(包含接/发端MAC地址、标志以太网类型的以太网数据的协议)并进行发送处理。发送处理中的FCS由硬件计算,添加到包的最后。
  5. 网络接口(以太网驱动)的处理:主机收到以太网包后,从包首部找到MAC地址,判断是否为发给自己的包,不是则丢弃数据。是的话,检查上层的数据类型,传给相应的子程序,如IP程序。
  6. IP模块的处理:如果是发给自己的IP地址,则可接受数据并查找上一层的协议。在有路由器的情况下,如果不是自己的地址,则借助路由控制表,调查应该送达的主机或路由器后转发数据。
  7. TCP模块的处理:首先计算校验和,判断数据是否被破坏。然后检查是在安装序号接收数据,最后是检查端口号,确定具体的应用程序。接收完毕后发生一个“确认回执”给发送端。
  8. 应用程序的处理:接收端应用程序接收数据,解析数据。给句解析结果反馈信息,如已接受、被退回等。

IP协议

TCP/IP的心脏是互联网层,这一层主要由IP、ICMP、ARP、RARP协议组成。

IP基础

IP大致分为三大作用模块:IP寻址、路由控制以及IP分包和组包。

  • 主机可以自己设置,并具有唯一性,且其不会发生改变。在网桥或交换集线器层转发设备中,不要设置IP地址。主机地址全部为0表示对应的网络地址不可获知,全部为1表示广播地址。
  • 一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制。一跳(Hop)指利用数据连输层以下分层的功能传输数据帧的一起区间。
  • 分片指将较大的IP包分成多个较小的IP包(由于数据链路的最大传输单元MTU的限制)。IP属于面向无连接的数据传输,其可靠性靠上一层的TCP。

IPv4地址

IPv4地址分为四类:ABCD类,开头分别为0 10 110 1110,网络表示分别为8位、16位、24位和32位。D类地址没有主机标示,常被用于多播。另外,主机地址全部为1通常作为广播地址,全部为0表示对应的网络地址或IP地址不可获知的情况才可以用。

子网掩码

  1. IP地址:172.20.100.52 子网掩码:255.255.255.192 (前26位是网络地址)
  2. IP地址:172.20.100.50 /26 (前26位是网络地址,后面6位是主机地址)

IPv4报头

计算机网络的组成

DNS域名服务器(IPv4、IPv6)

DNS为域名服务器,它可以管理所在分层的域的相关信息。根部所设置的DNS叫做根域名服务器,对DNS的检索数据功能起着至关重要的作用。进行DNS查询的主机和软件叫做DNS解析器,用户所使用的工作站或个人电脑都属于解析器。解析器为了调查IP地址,向域名服务器进行查询处理,接收这个查询请求的域名服务器首先会在自己的数据库进行查找,如果有该域名所对应的IP地址就返回,没有就像上一层服务器进行查询处理,知道找到对应的额IP地址。解析器和域名服务器将最新了解到的信息暂时保存在缓存里。DNS不止检索IP地址,还管理众多其他信息,如PTR、NS、A等。

ARP(IPv4、IPv6)

ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。ARP借助ARP请求与ARP响应两种类型的包确定MAC地址,源主机要通过广播发送一个ARP请求包,下一个网络设备确定是自己后,将MAC地址塞入ARP响应返回,进而实现IP通信。

  • RARP是ARP反过来,从MAC地址定位IP地址的一种协议。例如通过DHCP自动获取IP地址。
  • 代理ARP:通常ARP包会被路由器隔离,使用代理ARP的路由器可以将ARP请求转发给相邻的网段。

ICMP(IPv4、IPv6)

ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因,改善网络设置等。ICMP的消息大致分为两类:通知出错原因的错误消息、用于诊断的查询消息,主要的ICMP消息有:目标不可达消息、重定向消息、超时消息、返回消息等。ICMP使用IP发送。

DHCP(IPv4、IPv6)

DHCP协议可以实现自动设置IP地址、统一管理IP地址分配,实现即插即用。使用DHCP前,要假设DHCP服务器,并将所要分配的IP地址设置到服务器上,还需要相应的子网掩码、路由控制信息以及DNS服务器的地址等。一般的家庭网络都由宽带路由器冲到DHCP的角色。

IP隧道

IP隧道可以将IPv6网络发过来的包统和为一个数据,再为之追加一个IPv4首部在IPv4网络中传送(要在下个IPv6网络中,去除追加的IPv4首部),也可以将ipv4网络发过来的包统和为一个数据,再为之追加一个IPv6首部在IPv6网络中传送。

TCP与UDP

TCP和UDP是传输层具有代表性的协议。TCP提供可靠的通信传输,而UDP常被用于让广播和细节控制交给应用的不可靠通信传输。传输层要指出具体的程序,使用端口号(有逻辑端口和物理端口,此处指逻辑端口0~65535)这样的一种识别码,通过端口识别,将数据传递给HTTP、FTP等应用层协议。

UDP

UDP是不具有可靠性的数据报协议。它不提供复杂的控制机制,细微的处理它会交给上层的应用去完成,它在收到应用程序发来的数据后,立即鸳鸯发送到网络。UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信,比如DNS、即时通信等。

TCP

TCP是面向连接的、可靠的流协议,实行顺序控制或重发控制机制,此外还有流控制、拥塞控制、提高网络利用率等众多功能。它只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。

TCP报头

计算机网络的组成

TCP功能

滑动窗口控制

TCP利用滑动窗口控制提高速度。窗口大小指无须等待确认应答而可以继续发送数据的最大值。利用滑动窗口可以顺序地将多个端同时发送,而不需要等待上一个段的应答,从而提高通信性能。

可靠性(seq ack)

TCP通过肯定的确认应答(ACK)实现可靠的数据传输。在TCP三次握手连接时,主机收到SYN请求,则ACK+1,并返回ACK。在传递数据期间,如果收到的数据的seq等于上次ACK的值,则ACK=seq+len,不等于则返回上次发送的ACK,并返回ACK请求。每次主机收到一个数据或者SYN请求等,都会返回一个ACK数据。ACK的值表示下一个数据的序列号。另外,主机在发送ACK应答时,seq不会加1,但发送SYN请求时,seq会加1。

分段

在建立TCP连接的同时,可以确定发送数据包的单位,称为最大消息长度(MSS:Maximum Segment Size)。最理想的情况时,最大消息长度正好是IP中不会被分片处理的最大数据长度。在三次握手时,两端的主机会在TCP首部的可选项中写入MSS选项,最终的MSS是两个MSS的较小值。

连接管理

  1. 三次握手:主机A向主机B发送SYN请求(TCP数据报,seq=0,ack=0),主机B收到后返回SYN请求&ACK应答(同一个TCP数据报,seq=0,ack=1),主机A收到后返回ACK应答(seq=1,ack=1),则建立连接。在此过程中,同样会携带窗口大小等数据,从而进行流控制。
  2. 发送数据,主机a发送数据包(seq=1,ack=1,上次发送的ack应答并不计数),可以发送多个。主机B每收到一个非ACK数据包就会返回一个ack请求。
  3. A向B发送完数据后,可以发送FIN请求,B向A发送完数据后,也可以发送FIN请求,当双发发送FIN请求并收到ACK应答后,则会切断连接。

窗口控制与重发控制

接收端在收到非自己期望序号的数据时,会将数据保存,并对之前收到的数据进行确认应答。发送端收到三次重复的确认应答后,会进行该数据重新发送。由于可能存在ACK应答丢失情况,发送端收到一个确认应答后,则会判断该应答之前的所有数据都发送成功。

#### 流控制与拥塞控制
接收端主机向发送端主机通知自己可以接收数据的大小(会变换),于是发送端会发送不超过这个限度的数据。TCP首都中有个字段来通知窗口大小。接收端的缓冲区一旦面临数据溢出时,窗口大小的值随之减小并通知发送端,从而进行流量控制。
计算机网络都处在一个共享的环境,在网络出现拥堵时,如果突然发送一个较大量的数据,极有可能导致整个网络的瘫痪。为避免这个问题,通信一开始,就会通过一个慢启动的算法,对发送数据量进行控制。

应用协议

利用网络的应用程序很多,包括web浏览器、电子邮件、远程登录、文件传输、网络管理扥个,能够让这些应用程序进行特定通信处理的正是应用协议。

远程登录

远程登录主要使用TELNET和SSH两种协议,TELNET经常用于登录路由器或高性能交换机等网络设备进行相应的设置。SSH是加密的远程登录系统,可以具有更强的认证机制,可以转发文件,可以使用端口转发功能。OpenSSH是SSH协议的免费开源实现。

WWW万维网

万维网(又称web)是将互联网中的信息以超文本形式展现的系统。WWW定义了3个重要的概念:访问信息的手段和位置(URI)、信息的表现形式(HTML)以及信息转发(HTTP)等。

  • URI(Uniform Resource Identifier)用来标识资源,是一种可以用于WWW之外的高效的识别码,可用于主页地址、电子邮件、电话号码等各种组合中。URL常被用来标示互联网中所有资源的具体位置。
  • HTML:具有纯文本的功能,在页面中可以为文字或图像附加链接。它是WWW通用的数据表现协议,可以认为HTML属于WWW的表示层。另,JavaScript是一种嵌入在HTML中的编程语言。
  • HTTP。当用户在浏览器的地址栏里输入所要访问的Web也的URI后,HTTP的处理机会开始,首先客户端向服务器的80端口建立一个TCP链接,然后在这个TCP连接上进行请求和应答以及数据报文的发送。
  • HTTPS :Web中可以通过TLS/SSL对http通信进行加密,这种http通信叫做HTTPS通信。