TCP与UDP

一、TCP与UDP

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层的协议:TCP提供IP环境下的数据可靠性传输,它提前为所要发送的数据开辟好通道,然后在进行数据发送。UDP不为IP提供可靠性、流控或者差错恢复功能,其传输可靠性较低。

 

1.TCP与UDP的区别?

1.1TCP

      优点:TCP是面向连接的,TCP的三次握手和四次挥手最大限度的保证了数据连接的可靠性,在数据传输时,有确认、窗口、重传、拥塞控制机制,在数据传输完成后,会断开连接来节约系统资源。

     缺点:TCP在数据传输前,建立连接会消耗时间,确认、窗口…等也要消耗大量的时间。TCP的确认、三次握手机制容易被人利用,产生DOS攻击

    TCP常用的传输协议:①FTP(文件传输协议)②Telnet(远程登录接口)③SMTP(邮件传送协议)HTTP(从WEB服务器传输超文本到本地浏览器的传送协议)

1.2UDP

     优点:传输速度快,因为没有确认、重传、连接等机制

    缺点:不可靠、不稳定,因为UDP没有TCP那些可靠的传输机制,在进行数据传递时,如果网络质量不好,则很容易丢失数据。

UDP对应的协议:①DNS(域名解析)②SNMP(简单网络管理)③TFTP(简单文件传输协议)

1.3总结

  • TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  • TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的 ,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  • TCP首部开销20字节;UDP的首部开销小,只有8个字节
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

二、TCP

1.报文结构

1.1端口号:用来标识同一台计算机不同的应用进程

1.2源端口:源端口和IP地址的作用是标识报文的返回地址。

1.3目的端口:端口指明接收计算机上的应用程序接口

1.4序号(seq):seq是序列号

1.5ACK:ACK是确认号,给对方的确认方式就是把对方传来的seq+1并赋给ACK

1.6SYN:同步序号,用于建立连接过程,在连接请求中SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1

1.7FIN:

finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流.

1.8窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

 

2.TCP的三次 握手与四次挥手

2.1三次握手

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND(发送)状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV(接收)状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(已建立)状态,完成三次握手

 

NOTE:SYN和ACK是标志位(0/1)(ACK=1表明ack有效),seq是序列号,ack是确认号。2)给对方的确认方式就是把对方传来的seq+1并赋给ack

 

2.2四次挥手

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1。

第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

 

NOTE:

在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,server端等不到这个ACT将重新发送FIN给client端,client端接收到知道ACT报文丢失了将重新发送ACT报文。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

 

 

问题:

1.为什么一个3次一个4次不一样?

因为两端的数据并不是同时发送完,所以两端谁发送完数据都需要自己告诉对方一次,并且对方确认一次。

2.什么是套接字

一条TCP连接的两端就是两个套接字。套接字 = IP地址 :端口号,因此,TCP连接 = (套接字1,套接字2)= (IP1:端口号1,IP2:端口号2)

3.为什么要3次握手

   3 次是双向通信的最小值,也就是 SYN, SYN ACK, ACK ,两个发送两个接收 ,其中第二次把接收和发送合在一起了,如果两次握手的话,客户端有可能因为网络阻塞等原因会发送多个请求报文,这时服务器就会建立连接,浪费掉许多服务器的资源。所以要增加第三次握手。

 

4. 在浏览器中输入www.baidu.com后执行的全部过程 

    4.1、客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。

    4.2、在客户端的传输层(添加TCP头),把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。

   4.3、客户端的网络层(添加IP头)不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。

   4.4、客户端的链路层(添加MAC头),包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址

 

 

3.TCP的拥塞控制

    发生拥塞控制的原因:资源(带宽、交换节点的缓存、处理机)的需求>可用资源

   作用:拥塞控制就是为了防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至于过载。拥塞控制要做的都有一个前提:就是网络能够承受现有的网络负荷。

 

拥塞窗口:发送方为一个动态变化的窗口叫做拥塞窗口,拥塞窗口的大小取决于网络的拥塞程度。发送方让自己的发送窗口=拥塞窗口,但是发送窗口不是一直等于拥塞窗口的,在网络情况好的时候,拥塞窗口不断的增加,发送方的窗口自然也随着增加,但是接受方的接受能力有限,在发送方的窗口达到某个大小时就不在发生变化了。

发送方如何知道网络拥塞了呢?发送方发送一些报文段时,如果发送方没有在时间间隔内收到接收方的确认报文段,则就可以人为网络出现了拥塞。

 

解决方法:使用慢启动算法思路,如主机开发发送数据报时,如果立即将大量的数据注入到网络中,可能会出现网络的拥塞。慢启动算法就是在主机刚开始发送数据报的时候先探测一下网络的状况,如果网络状况良好,发送方每发送一次文段都能正确的接受确认报文段。那么就从小到大的增加拥塞窗口的大小,即增加发送窗口的大小

 

 

4.快重传

   快重传算法要求首先接收方收到一个失序的报文段后就立刻发出重复确认,而不要等待自己发送数据时才进行捎带确认。接收方成功的接受了发送方发送来的M1、M2并且分别给发送了ACK,现在接收方没有收到M3,而接收到了M4,显然接收方不能确认M4,因为M4是失序的报文段。如果根据可靠性传输原理接收方什么都不做,但是按照快速重传算法,在收到M4、M5等报文段的时候,不断重复的向发送方发送M2的ACK,如果接收方一连收到三个重复的ACK,那么发送方不必等待重传计时器到期,由于发送方尽早重传未被确认的报文段。

 

5.快恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值