计算机网络基础运输层,计算机网络基础知识——运输层

OSI的七层协议与TCP/IP的四层协议

OSI的七层协议与TCP/IP的四层协议

IP地址和硬件地址

物理地址是数据链路层和物理层使用的地址

IP地址是网络层和以上各层使用的地址,是一种逻辑地址

网络层与运输层

网络层为主机之间提供逻辑通信

网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。

运输层为应用进程之间提供端到端的逻辑通信

运输层向高层用户屏蔽了下面网络核心的细节,使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。

协议端口号(protocol port number)

协议端口号简称为端口(port)

运输层收到IP层交上来的运输层报文时,能够根据端口号把数据交付应用层的目的应用进程

端口号只具有本地意义,标识本计算机上应用层中各个进程在和运输层交互时的层间接口

传输控制协议TCP

特点

面向连接的运输层协议:先建立连接,用后释放连接

一条TCP只能连接两个端点:点对点通信

可靠交付:无差错、不丢失、不重复、按序到达

全双工通信:通信双方都可以发送和接受数据

面向字节流:TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流

TCP的连接的端点——套接字(socket)

端口号拼接到IP地址即是套接字。

套接字 socket = (IP地址:端口号)

TCP报文段的首部格式

TCP报文段的首部格式

首部的前20个字节是固定的,后面4n字节根据需要而增加的选项(n是整数)

所以,TCP首部的最小长度是20字节

介绍在TCP的握手挥手过程中示例用到的五个字段(注意大小写):

序号(seq):TCP传送的每一个字节都按顺序编号,序号字段值指的是本报文段所发送的数据的第一个字节的序号

确认号(ack):期望收到对方下一个报文段的第一个数据字节的序号

确认ACK(ACKnowledgment):ACK=1时确认字段有效,在建立连接后所有传送的报文段都必须把ACK置1

同步SYN(SYNchronization):SYN=1表示这是一个连接请求或连接接受报文。SYN=1而ACK=0时,连接请求报文段;SYN=1和ACK=1,连接接受,同意建立连接。

终止FIN:用来释放一个连接。FIN=1表明已经发送完成,要求释放连接。

TCP连接建立——三次握手

TCP连接建立的三次握手

第一次握手,A->B:SYN=1而ACK=0时,发送连接请求的报文,TCP规定,SYN=1的报文段不能携带数据,但要消耗掉一个序号。初始的序号为seq=x。

第二次握手,B->A:SYN=1和ACK=1,发送确认同意建立连接,确认号ack=x+1,自己的初始序号seq=y。

第三次握手,A->B:再次向B确认ACK=1,确认号ack=y+1,当前序号seq=x+1。TCP规定,ACK如果不携带数据则不消耗序号,这种情况下,下一次A向B发送数据报文段的序号仍旧是seq=x+1。

为什么需要三次握手?

直观上看似乎第三次的握手是不必要,因为两次的握手,一来一往,已经可以建立起连接。那么A为什么还有发送第三次确认呢?主要是防止已经失效的连接请求报文又再次传到B,假如这种情况发生,在没有第三次握手机制下,B会以为A又一次创建连接,而实际上,这次连接请求报文是由于各种原因导致的A没有收到确认信息而再次重发的报文,B创建连接后会一直等待下去。现在有了第三次握手机制,B收到连接请求报文后,发送确认,A不理睬,B不会创建连接了。

TCP建立连接的四次握手(三次握手是重点,这里的四次握手仅仅是一个扩展,了解一下即可)

上面的三次握手中,B发给A的一次握手可以拆分为两次握手,先发送一个确认的报文段ACK=1,ack=x+1,再发送一个同步报文段SYN=1,seq=y。这样就成为了四次握手,效果与三次握手是一样的。

TCP连接释放——四次挥手

TCP连接释放的四次挥手

第一次挥手,A->B:发送释放连接的报文段,FIN=1,seq=u,A停止发送数据。TCP规定FIN报文段即使不携带数据,它也消耗掉一个序号。

第二次挥手,B->A:B发出确认ACK=1,ack=u+1,seq=v,此时B可以继续发送数据,若B发送数据,A仍要接收。

第三次挥手,B->A:如果B没有数据继续发送,B向A发送要求释放连接的报文段,FIN=1,ACK=1,ack=u+1(仍要回复上次的确认号),seq=w(第二次握手后可能又发送了一些数据)。

第四次挥手,A->B:A向B发送确认报文段,ACK=1,ack=w+1,seq=u+1。B进入关闭状态。

四次握手后,需要经过时间等待计时器设置的2MSL(MSL是最长报文段寿命,RFC793建议设为2分钟,当然可以根据网络实际情况调整更小的值。),A才进入关闭状态。首先,保证A在最后一次挥手发送的ACK报文段能够到达B,如果丢失可以重发;另外,保证此次连接中所产生所有报文段可以从网络中消失,在新的连接中不会受到旧的报文段,尤其旧的连接请求报文段干扰。

TCP拥塞控制

基于窗口的拥塞控制,发送方维持一个叫做拥塞窗口cwnd(congestion window),拥塞窗口大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。

拥塞窗口的变化:

慢开始。当主机开始发送数据时,由于并不清楚网络的负荷情况,所以如果立即把大量数据字节注入到网络,那么就有可能引起网络发生拥塞。慢开始是由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。一般拥塞窗口成倍数增大。

拥塞避免。让拥塞窗口缓慢增大,每次增加1,而不是慢开始的成倍数增大。拥塞避免的“加法增大”,拥塞窗口按线性规律缓慢增长,比慢开始增长要缓慢的多。

快重传。要让发送方尽早知道发生了个别报文段的丢失。要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。另外,快重传规定发送方只要一连收到3个重复确认,就知道是否存在没有收到的报文段,如果存在这样丢失的报文段,应当立即进行重传(即“快重传”)。快重传可以让发送方不会因为网络中个别报文的丢失误认为出现了网络拥塞,减小拥塞窗口。

快恢复。当网络出现拥塞时,慢开始会将拥塞窗口设置为1后,重新根据网络情况动态增大。快恢复开始时设置一个相对大的拥塞窗口初始值,网络发送方在网络拥塞之后快速恢复。

应用层的域名系统DNS

域名系统DNS——从域名解析出IP地址,即把互联网上的主机名字转换为IP地址

域名系统DNS是一个联机分布式数据库系统

你可能感兴趣的:(计算机网络基础运输层)