• 具体解释TCP协议的服务特点以及连接建立与终止的过程(俗称三次握手四次挥手)


    转载请附本文的链接地址:http://blog.csdn.net/sahadev_/article/details/50780825 ,谢谢。


    tcp/ip技术经常会在我们面试的时候出现,非常多公司也要求须要掌握tcp/ip,socket等。所以掌握这项技术会为我们面试的时候加分。

    好,今天我就简单的介绍一下tcp技术:

    首先说一下tcp位于运输层,如今网络被分为了5层,由上往下说:

    应用层,运输层,网络层,链路层,物理层。

    应用层:就是我们使用的http技术或者ftp协议包装了我们要传输的数据。

    运输层:它会将应用层的数据包装发送给网络层,它为应用层提供了各种各样的传输方式。

    比如tcp提供了可靠的传输的传输技术,就是由运输层来实现的。

    网络层:对运输层的数据进一步的包装,并将上层数据包发往目的端。

    比如我们通常所熟悉的ip协议就位于这一层。

    链路层:这一层为IP发送和接收数据报,通常包含操作系统中的设备驱动程序和计算机中相应的网络接口卡,他们一起处理与电缆的物理接口细节。

    物理层:就是我们的电话线。光缆。wifi之类的。


    简介了下网络协议的分层,回来说说tcp协议的特点:

    ·应用数据被切割成TCP觉得最适合发送的数据块。由TCP传递给IP的信息单位成为报文段或段。

    ·当TCP发出一个段后,它启动一个定时器。等待目的端确认收到这个报文段。

    假设不能及时收到一个确认。将重发这个报文段。

    ·当TCP收到法子TCP链接还有一端的数据,它将发送一个确认。这个确认不是马上发送,通常将推迟几分之中的一个秒。

    ·TCP将保持它首部和数据的检验和,这是一个端到端的检验和。目的是检測数据在传送过程中的不论什么变化。

    假设收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发送端超时重发)。

    ·既然TCP报文段作为IP数据报来传输。而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。

    假设必要,TCP将对收到的数据进行又一次排列,将收到的数据以正确的顺序交给应用层。

    ·既然IP数据报会反复发送。TCP的接收端必须丢弃反复的数据(由于会超时重发)

    ·TCP还能提供流量控制。TCP链接的每一方都有固定大小的缓冲控件。

    TCP的接收端同意还有一端发送接受端缓冲区所能接纳的数据。

    这将防止较快主机致使较慢主机的缓冲区溢出。


    通过以上特点。TCP会保证发送端应用层的数据正确,准确。按次序到达目的端应用层。


    说完了TCP协议的特点。我们接下来描写叙述一下三次握手与四次挥手。网上的非常多文章对这块讲的不具体,不是依照专业词语来描写叙述的,使我们缺乏对原理的理解。

    三次握手过程:

    1.client发送一个SYN段(SYNchronous,TCP首部中同步序号标志)指明将要链接的server接口,段中包括初始序号ISN(Initial Sequence Number 初始序号)。

    2.服务端发回SYN段作为应答。当中包括服务端的初始序号以及将确认序号。确认序号设置为客户的ISN值加1,以对客户的SYN报文段进行确认。

    3.client必须将确认序号设置为server的ISN值加1并发送给服务端,以对服务端的SYN报文段进行确认。


    四次挥手过程:

    为什么要有4次挥手呢,由于TCP连接是全双工的,即数据在两个方向上能同一时候传递,所以关闭的时候须要先将一边关闭,再将还有一边关闭。

    1.当一段完毕数据发送任务之后,能够发送一个FIN(也就是finish,TCP首部中的结束标志)。来终止这个方向连接。

    2.当还有一端收到FIN之后,它必须通知应用层还有一端已经终止了那个方向的数据传送。

    而且它须要发回一个ACK(ACKnowledgment TCP首部中的确认标志)进行确认。确认序号为收到的序号加1,和SYN一样,FIN也相同会包括一个序号。同一时候TCP的这一端还向应用层传送一个文件结束符。

    3.接着这一端。也就是刚開始接收到FIN码的这一端会发送一个FIN来请求关闭还有一边的通路。

    4.client收到之后必须发挥一个确认,并将确认序号设置为收到序号加1。


    好了。以上就是关于TCP的特点以及三次握手与四次挥手的过程。希望大家能够读懂吸收成为自己的知识,有不明确的欢迎留言讨论。

  • 相关阅读:
    小米智能家居接入智能家居平台homeassistant的方法
    我的nodejs 快速入门
    node.js JS对象和JSON字符串之间的转换
    Mac安装搭建sublimeText3开发Nodejs环境
    使用Xcode IDE写node.js
    nodejs中exports与module.exports的区别
    安装pysqlite2
    linux 终端分屏命令
    MQTT学习笔记
    Cache缓存
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7230513.html
Copyright © 2020-2023  润新知