一、TCP和UDP的区别
TCP协议:
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议
TCP协议的特点:
a.需要建立连接,传输数据,释放连接三个阶段
b.向上级提供有序的,可靠的,无差错的数据传输服务
UDP协议:
UDP是面向无连接,可以随时发送数据。不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的一刻,立即按照原样发送到网络上的一种机制。
UDP协议的特点:
a. 是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。
b.灵活方便比较迅速。
c.不会对报文重复的丢失、重复或无序进行处理
两者之间的区别
TCP是面向连接的,UDP是无连接的;
TCP是可靠的,UDP是不可靠的;
TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
TCP是面向字节流的,UDP是面向报文的;
TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;
TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;
二、OSI七层网络模型
物理层:在物理层上所传数据的单位是比特。物理层的任务就是透明地传送比特流。
数据链路层:互联设备之间传送和识别数据帧。我们知道,两个主机之间的数据传输,总是在一段一段的链路上传送的,也就是说,在两个相邻结点之间传送数据是直接传送的(点对点),这时就需要使用专门的链路层的协议。
网络层:将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地址。因此,这一层主要负责寻址和路由选择。
传输层:起着可靠传输的作用。只在通信双方节点上进行处理,而无需在路由器上处理。
会话层:负责建立和断开通信连接欸,以及数据的分割等数据传输相关的管理。
表示层:将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换。
应用层:为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登陆等协议。
数据从A 的应用层往下走到物理层,会在每一层都会加上头部信息,进行封装,然后再发送到B。
然后 Server B 从 最下面的物理层往上 每一层进行解封装,最后到达应用层,得到数据。
三、TCP/IP协议五层协议模型
硬件(物理层)
TCP/IP的最底层是负责数据传输的硬件,如以太网或者电话线路等物理设备。TCP/IP是在网络互联的设备之间能够通信的前提之下提出来的协议。
网络接口层(数据链路层)
网络接口层利用以太网中的数据链路层进行通信,因此属于接口层。也可以把它当作让NIC起作用的“驱动程序”。
互联网层(网络层)
互联网层使用IP协议,相当于OSI模型中的网络层。
TCP/IP分层中的互联网层和传输层的功能通常是由操作系统提供。尤其是路由器,它必须得实现通过互联网层转发分组数据包的功能。此外,链接互联网的所有主机和路由器都必须实现IP的功能,其他连接互联网的网络设备就没必要一定实现IP或TCP的功能。
传输层
传输层最主要的功能就是要实现应用程序之间的通信。计算机的内部,通常同一时间运行着多个程序。为此,我们必须分清哪些程序与哪些程序正在进行通信,识别这些应用程序的是端口号。
TCP
TCP是一种面向有连接的传输协议。优点在于安全性高,缺点在于多次发包收包会浪费网络流量。
UDP
UDP是一种面向无连接的传输协议。优点在于程序简单,缺点在于安全性低。
应用层(会话层以上的分层)
TCP/IP的分层中,将OSI参考模型中的会话层、表示层、应用层的功能都集中到了应用程序中实现。
我这里简单介绍几个应用程序:
WWW
浏览器与服务器之间通信所用的协议是HTTP,它属于OSI应用层的协议。
所传输数据的主要格式是HTML,它属于OSI表示层的协议。
电子邮件
发送电子邮件所用到的协议是SMTP,它只可以发送文本格式,后来电子邮件的格式由MIME协议扩展,就可以发送声音、图像等各种各样的信息。MIME也属于表示层的协议。
文件传输
文件传输指可以将其他计算机硬盘中的文件传输到本机上,或者相反的操作。文件传输所用的协议是FTP。
远程登录
远程登录是指登录到远程的计算机上,使那台计算机上的程序可以运行。
TCP/IP网络中远程登录常用TELNET和SSH两种协议。
网络管理
在TCP/IP中进行网络管理时,采用SNMP协议。使用SNMP管理的主机、网桥、路由器等称作SNMP代理,而进行管理的那一段叫做管理器。SNMP就是管理器和代理之间要用到的协议。
四、五个术语
包:全能型数据,在哪一个层次都可以说。
帧:用于表示数据链路层中包的单位。
数据报:IP和UDP等网络层以上的分层中包的单位。
段:TCP数据流中的消息。
消息:应用协议中数据的单位。
五、IP协议相关技术
IP的主要作用
(1)IP寻址
在计算机通信中,为了识别通信段,必须要有一个类似于地址的识别码进行标识。而在数据链路层,使用MAC地址来标识同一个链路中不同计算机的一种识别码。在网络层,则叫做IP地址。
(2)路由(最终节点为止的转发)
路由控制(Routing)是指将分组数据发送到最终目标地址的功能。即使网络非常复杂,也可以通过路由控制确定到达目标地址的通路。因此,一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制。
Hop中文叫“跳”,它是指网络中的一个区间,IP包正是在网络中一个跳间被转发。数据链路实现某一个区间(一跳)内的通信,而IP实现直至最终目标地址的通信(点对点)。
(3)IP分包与组包
IP面向无连接,即在发包之前,不需要建立与对端目标地址之间的连接。上层如果遇到需要发送给IP的数据,该数据会被立即压缩成IP包发送出去。
IP为什么面向无连接:
1.简化:面向连接比起面向无连接处理相对复杂!
2.提速:每次通信之前都需要建立连接,会降低处理速度!
需要有连接时,可以委托上一层(传输层)提供此项服务,因此,IP为了实现简单化与高速化采用面向无连接方式。
DNS
DNS的产生
我们平常在访问某个网站时不使用IP地址,而是用一串罗马字和点号组成的字符串。能够这样做是因为有DNS,DNS可以将那串字符串自动转换为具体的IP地址。
所以DNS系统就是为了有效管理主机名和IP地址之间对应关系的系统。
域名的构成
在理解DNS规范时,首先需要了解什么是域名。域名是为了识别主机名称和组织机构名称的一种具有分层的名称。域名的范围要比主机名大,一个域名下可以有多个主机名,域名下还可以有子域名。例如域名abc.com下,有主机server1和server2,其主机名就是server1.abc.com和server2.abc.com。
域名的分层结构
DNS查询
DNS工作原理
1、在浏览器中输入www . qq .com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(http://qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找http://qq.com域服务器,重复上面的动作,进行查询,直至找到www . qq .com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。
ARP
概要
只要确定了IP地址,就可以向这个目标地址发送IP数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个IP地址所对应的MAC地址。
ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。
ARP工作机制
主机A为了获得主机B的MAC地址,起初要通过广播发送一个ARP请求包。这个包中包含了想要了解其MAC地址的主机IP地址。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自己的MAC地址塞入响应包返回给主机A。
网络层的ARP协议完成了IP地址与物理地址的映射。首先,每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址:如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
ICMP
功能
一个刚刚搭建好的网络,需要验证该网络的设置是否正确。ICMP(Internet Control Message Protocol)这是提供这类功能的一种协议,其主要功能包括:确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因等等。例如我们经常使用ping命令,就是一个典型的ICMP的具体应用。
原理
在IP通信中如果某个IP包因为某种原因未能到达目标地址,那么这个具体的原因将由ICMP负责通知。主机A向主机B发送了数据包,由于某种原因,途中的路由器2未能发现主机B的存在,这时,路由器2就会向主机A发送一个ICMP包,说明发往主机B的包未能成功。
ICMP的这种通知消息会使用IP进行发送。因此,从路由器2返回的ICMP包会按照往常的路由控制先经过路由器1再转发给主机A。收到该ICMP包的主机A则分解ICMP的首部和数据域以后得知具体发生问题的原因。
DHCP
动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
NAT
定义
NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。除转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT(窗口多路复用)技术,由此可以实现一个全局IP地址与多个主机的通信。
实现方式
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
端口多路复用( Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
六、TCP
TCP使用端口号提供进程到进程间的通信。下面是一些熟知端口号。
| 端口 | 协议 | 说明 |
| 7 | Echo | 把收到的数据报回送到发送发 |
| 9 | Discard | 丢弃收到的任何数据报 |
| 11 | User | 活跃的用户 |
| 13 | Daytime | 返回日期和时间 |
| 17 | Quote | 返回日期的引用 |
| 19 | Chargen | 返回字符串 |
| 20和21 | FTP | 文件传送协议(控制和数据) |
| 23 | TELNET | 终端网络 |
| 25 | SMTP | 简单邮件传送协议 |
| 53 | DNS | 域名服务器 |
| 67 | BOOTP | 引导程序协议 |
| 79 | Finger | Finger |
| 80 | HTTP | 超文本传送协议 |
TCP三次握手
通过***与确认应答提高可靠性
***是按顺序给发送数据的每一个字节都标上号码的编号。接收端查询接收数据TCP首部中的***和数据的长度,将自己下一步应该接收的***作为确认应答返送回去。就这样,通过***和确认应答号,TCP可以实现可靠传输。
流程
SYN: 表示建立连接
FIN: 表示关闭连接
ACK: 表示响应
PSH: 表示有 DATA数据传输
RST: 表示连接重置。
- TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
- TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始*** seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
- TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个*** seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
- TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的***seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
- 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
为什么TCP客户端最后还要发送一次确认呢?
一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
TCP四次挥手
- 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其***为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
- 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的***seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
- 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
- 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的***为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
- 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的***是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
- 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
为什么建立连接是3次握手,而断开连接是4次握手?
建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
为什么客户端最后还要等待2MSL?
保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
TCP以段位单位发送数据
在建立TCP连接的同时,也可以确定发送数据包的单位,称之为“最大消息长度”:MSS。最理想的情况是,最大消息长度MSS正好是IP层中不被分片处理的最大数据长度。
TCP在传送大量数据的时候,是以“段=MSS的大小”将数据进行分割发送的,进行重发时也是以MSS为单位的。
最大消息长度——MSS是在三次握手的时候,在两端主机之间被计算得出的。两端主机在发出“建立TCP连接请求的SYN包”时,会在SYN包的TCP首部中写入MSS选项,告诉对方自己所能够适应的MSS的大小,然后发送端主机会在两者之间选择一个较小的MSS值投入使用。
利用窗口控制提高速度
TCP是以一个段为单位进行数据的传输的,每发送一个段,就会等待对端主机的针对这个段的确认应答信号ACK,但这样的传输方式的缺点也很明显,就是:当数据包的往返时间越长,通信性能越低。
为了解决这个问题,TCP引入了窗口这个概念,即使在往返时间比较长的情况下,它也能够控制网络性能的下降。如图7 所示:确认应答包不再以每个段为单位进行确认了,而是以更大的单位进行确认,转发时间将会被大幅度的缩短。也就是说,发送端主机在发送了一个段之后,没必要一直等待对端主机的确认应答信号,而是继续发送。
窗口大小,指的就是无需等待接收端主机的确认应答信号而可以持续发送的数据的最大值,或者说段的最大值,如图所示的窗口大小是4 个段。动窗口控制的实现,使用了大量的缓冲区,通过对多个段的数据同时进行确认应答来实现高效传输。
窗口控制和重发控制
在使用了窗口控制中,如果出现段丢失怎么办?
首先,我们先考虑接收端已经收到数据包只是反馈的确认应答包ACK包在途中丢失了的情况。
如图所示:在这种情况下,数据是已经被对端主机成功接收了的,是不需要进行重新发送的。然而,在没有使用窗口控制的前提下,没有收到确认应答包的数据包都会被重发。但是,在使用了窗口控制以后,就如图所示,某些确认应答包即使丢失了也无需重发,这也提高了传输效率。
其次,我们再来考虑一下某个数据包丢失的情况。
如果当接收端主机接收到一个自己应该接收的***之外的数据包时,它会一直对当前接收到的数据包返回确认应答包。
因此,如图所示:当某一个数据包丢失以后,发送端会一直接收到***为1001的确认应答包,这个确认应答包好像是在提醒发送端主机“我现在想要接收的数据包***是1001开始的”。
因此,在滑动窗口比较大的情况下,同一个***的确认应答将会被重复不断地返回。而发送端主机如果 连续3次接收到同一个确认应答包,就会将其对应的数据重发,这种机制比之前提到的“超时重发”更加高效,所以被称之为“高速重发控制”。
拥塞控制
(1)有了TCP的滑动窗口控制,收发主机之间即使不再以一个“段”为单位发送确认应答信号,也能够连续发送大量数据包。然而,如果在通信刚开始的时候就发送大量的数据包,也有可能会导致其他问题。
问题的发生: 要知道,计算机网络都处在一个共享的环境中,因此也有可能是因为其他的主机之间的通信使得整个网络出现拥堵。所以,在网络拥堵时,如果突然发送一个较大量的数据包,极有可能导致网络的瘫痪。
(2)TCP为了防止这种问题的发生,在通信一开始的时候会通过一个叫做“慢启动”的算法对发送的数据量进行控制。
首先,为了在发送端调节所要发送的数据量,定义了一个叫做“拥塞窗口”的概念。于是,在慢启动刚开始的时候,把这个拥塞窗口设置为1个MSS(1个数据段)发送数据,之后每收到一个接收端主机的确认应答信号ACK包 就把这个拥塞窗口的数值加1。然后,在发送数据的时候,把拥塞窗口和滑动窗口的大小作比较,按照它们当中较小的那个值来发送比其还要小的数据量。
不过,随着数据包的每次的往返,拥塞窗口会以1、2、4、8等指数函数的增长,拥堵状况激增甚至导致网络拥塞的发生。为了防止这些,又引入了“慢启动阈值”的概念,只要拥塞窗口超过这个阈值,在每收到一个ACK包的时候,只允许以下面这种方式来增大拥塞窗口:(1个数据段的字节数的平方 / 拥塞窗口的字节数)。这样的话,拥塞窗口越大,确认应答的数目也会增加,但是其涨幅却逐渐减少,因此会导致拥塞窗口是直线形式的上升。
TCP在刚开始通信的时候,并没有设置慢启动阈值,而是在超时重发时,才会把慢启动阈值设置为当前窗口的一半大小。
(3)由重复确认应答而触发的高速重发与超时重发机制的处理是不一样的。因为前者要求至少 3 次的确认应答包到达对方主机才会触发,相比后者网络拥堵的程度较轻一些。
而由重复确认应答进行高速重发控制时,慢启动阈值的大小被设置为当时窗口大小的一半,然后将窗口大小设置为该慢启动阈值+3个MSS的大小。
(4)有了这样的一种控制过之后,TCP的拥塞窗口的变化曲线 如图所示。由于窗口的大小会直接影响数据被转发的吞吐量,所以一般情况下,窗口越大,越会形成高吞吐量的通信。
七、TCP的拥塞处理
计算机网络中的带宽、交换结点中的缓存及处理机等都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞。拥塞控制就是 防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。注意,拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。拥塞控制的方法主要有以下四种:
1). 慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小;
2). 拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。
3). 快重传:快重传要求接收方在收到一个 失序的报文段 后就立即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
4). 快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半,但是接下去并不执行慢开始算法:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。
结合博文拥塞控制
八、TCP协议如何来保证传输的可靠性
TCP提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP链接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。
对于可靠性,TCP通过以下方式进行保证:
数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;
对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;
丢弃重复数据:对于重复数据,能够丢弃重复数据;
应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;如果我们延迟一会,等待缓存区中数据被处理,那么剩余的缓存区就会大些——这就是延时应答。
超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;
流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。在TCP首部中,专门有一个字段用来通知窗口大小。接收主机将自己可以接收的缓冲区大小放入这个字段中通知给发送端。这个字段的值越大,说明网络的吞吐量越高。
九、计算机网络中的网关和网桥
什么是网关?
连接两个不同的网络的设备都可以叫网关设备;网关的作用就是实现两个网络之间进行通讯与控制。
网关设备可以是 交互机(三层及以上才能跨网络)、路由器、启用了路由协议的服务器、代理服务器、防火墙等
网关地址就是网关设备的IP地址。
假设我们有两个网络:
网络A的IP地址范围为“192.168.1.1~192.168.1.254”,子网掩码为255.255.255.0
网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0
要实现这两个网络之间的通信,则必须通过网关。
如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络A向网络B转发数据包的过程。
只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。
默认网关
一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。
什么是网桥?
网桥是一个局域网与另一个局域网之间建立连接的桥梁。网桥是属于数据链路层的一种设备,它的作用是扩展网络和通信手段,在各种传输介质中转发数据信号,扩展网络的距离,同时又有选择地将有地址的信号从一个传输介质发送到另一个传输介质,并能有效地限制两个介质系统中无关紧要的通信。
十、本机ip和127.0.0.1的区别
1.本地ip和127.0.0.1都是ip地址, 只是127.0.0.1比较特殊, 发送到127.0.0.1的数据或者从127.0.0.1返回的数据只会在本机进行传输, 而不进行外部网络传输;
2.127.0.0.1主要有以下两个作用
测试本机网络
当我们可以ping通127.0.0.1的时候, 则说明本机的网卡以及tcp/ip协议族被正确安装了。
测试编写的网络应用
我们可以将本地ip和127.0.0.1分别看做客户端和服务器的ip地址, 然后在一台电脑上完成client/server应用的测试。
3.当涉及到计算机间的网络通信时, 则使用本机ip 。
十一、常见的基于TCP/UDP的应用层协议
使用TCP协议的常见端口主要有以下几种:
(1) FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
(2) Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
(3) SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
(4) POP3:Post Office Protocol 3的简称,即邮局协议的第3个版本,它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。
(5)HTTP:这是大家用得最多的协议,它就是常说的"超文本传输协议"。上网浏览网页时,就得在提供网页资源的计算机上打开80号端口以提供服务。常说"WWW服-务"、"Web服务器"用的就是这个端口。
使用UDP协议端口常见的有:
(1)RIP:路由选择信息协议(RIP)是一种在网关与主机之间交换路由选择信息的标准。
(2) DNS:用于域名解析服务,这种服务在Windows NT系统中用得最多的。因特网上的每一台计算机都有一个网络地址与之对应,这个地址是常说的IP地址,它以纯数字+"."的形式表示。然而这却不便记忆,于是出-现了域名,访问计算机的时候只需要知道域名,域名和IP地址之间的变换由DNS服务器来完成。DNS用的是53号端口。
(3) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。