计算机网络之传输层

Posted jimmyfanhome

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络之传输层相关的知识,希望对你有一定的参考价值。

一.Tcp的作用

  1.提供面向连接,可靠的字节流服务。

    a.面向连接是说,交换数据前要建立连接。

    b.可靠是通过把数据分割成数据块,以及超时重发的机制。

    c.字节流是指程序之间的数据传输是通过字节构成的字节流。

二.Tcp报文首部详解

         首先来看看Tcp包首部,其中主要有端口号,数据包序号,确认序号,标记位等。

  技术分享图片

  1.端口号:有源端口号和目的端口号,用于寻找发送端和接收端的应用进程,加上IP首部的源端IP及终端IP,唯一的确认一个TCP连接。

  2.32为序号:标识发送的数据包的字节流。

  3.32确认序号:上次成功接收的数据包的序号+1,只有ACK为1时有效。

  4.标记位:URG,是指该数据比较重要,加急传送,不用排队。

       ACK,确认号,为0时表面没有数据包返回。

       SYN,同步号,为1时表面建立连接,比如SYN=1,ACK=0则是一个明显的建立连接的数据包(SYN攻击,伪造发送方,不断发送连接数据包,搞垮服务器)。

       PSH,接收时加急传输。

       RST,说明TCP出现严重的问题,要重新发送。

       FIN,数据通信结束,释放连接。

三.三次握手与四次挥手

  1.三次握手

  技术分享图片

    a.第一次握手,客服端本来打开CLOSED状态,发送一个SYN=1,seq=x(随意的一个值),ACK=0的数据包发送连接请求,客户端进入SYN_SEND状态(A发送请求)。

    b.服务端处于LISTEND状态,接收到请求后,发送一个SYN=1,ACK=1,seq=y(随意),ack=x+1,的数据包,说明自己已经收到你的请求,之后进入SYN_RECD状态(确认B收到了)。

    c.客户端收到确认数据包后,再发送一个ACK=1,seq=x+1,ack=y+1的数据包,表面你的确认数据包我已经收到,我已经做好准备了,我们可以开始连接了,然后客户端进入ESTAB_LISTEND状态,准备进行数据传输(确认A也准备好了)。

    d.服务端收到这个请求后也知道客户端准备好了,所以也进入ESTAB_LISTEND状态,准备进行数据传输。       

       

  2.四次挥手

技术分享图片

 

   1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态,Server到Client还可以发。

   2.第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

   3.第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

   4.第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,四次挥手。

四.TCP和UDP的区别与使用

  1.TCP的优缺点

    优点:可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

    缺点:TCP的缺点: 慢,效率低,占用系统资源高,易被攻击。

  2.UDP的优缺点

    优点: 快,比TCP稍安全。

    缺点:不可靠,容易丢包。

  3.应用场景

    TCP:比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

    UDP:QQ语音 QQ视频 TFTP 。

  

以上是关于计算机网络之传输层的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络之传输层 上

计算机网络之传输层概述UDP协议以及TCP协议特点和报文段408_1

网络之传输层

网络基础之网络协议

网络骇客入门之网络编程:网络应知应会

Java 之 网络编程