详解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.客户端发送一个SYN段(SYNchronous,TCP首部中同步序号标志)指明将要链接的服务器接口,段中包含初始序号ISN(Initial Sequence Number 初始序号)。

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

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


四次挥手过程:

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

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

2.当另一端收到FIN之后,它必须通知应用层另一端已经终止了那个方向的数据传送。并且它需要发回一个ACK(ACKnowledgment TCP首部中的确认标志)进行确认,确认序号为收到的序号加1,和SYN一样,FIN也同样会包含一个序号。同时TCP的这一端还向应用层传送一个文件结束符。

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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 知识库问答中关系检测的学习表示映射

论文笔记整理:吴涵,天津大学硕士,研究方向:自然语言处理。链接:Paper: https://arxiv.org/pdf/1907.07328v1.pdfCode: https://github.com/wudapeng268/KBQA-Adapter引入在关系检测任务中,对于训练数据中已…

LeetCode 1175. 质数排列

文章目录1. 题目2. 解题1. 题目 请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。 让我们一起来回顾一下「质数」:质数一定是大于 1…

CV模型,全目标检测等

CV视频全目标检测:https://www.bilibili.com/video/BV1zi4y137Xy?p63

ICLR最高分论文揭秘模型泛化,GNN是潜力股

文 | Jerry Qiu编 | 小轶我们都知道,人类在很多任务上都可以很好地完成“外推”,例如:啊不——我是说——例如,我们学会两位数的加减乘除后,就可以轻松将其推广至任意大整数的四则运算:从数学的角度来讲&am…

Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(一)

前段时间我一个朋友在面试回来问我:那个公司要5天之内完成一个项目,功能包括每天早上6点开始执行定时任务,大批量图片上传,大批量数据库同步。我心想,后两个功能还好说,可就是每天早上6点开始执行的这种定时…

PyTorch 读取大数据

PyTorch 读取大数据 数据量太大,必须分批从磁盘加载,下面是单机单卡的思路: from torch.utils.data import Dataset, DataLoader import torchclass PretrainData(Dataset):def __init__(self):假设data是个数据量很大的文件,每…

配送交付时间轻量级预估实践

1. 背景 可能很多同学都不知道,从打开美团App点一份外卖开始,然后在半小时内就可以从骑手小哥手中拿到温热的饭菜,这中间涉及的环节有多么复杂。而美团配送技术团队的核心任务,就是将每天来自祖国各地的数千万份订单,迅…

论文浅尝 | 面向 cQA 的跨语言问题检索方法

论文笔记整理:谭亦鸣,东南大学博士生,研究方向为知识库问答。来源:WWW2019链接:https://dl.acm.org/citation.cfm?doid3308558.3313502本文提出了一种面向cQA的跨语言问题检索方法,旨在对于给定的问题检索…

揭秘Python并发编程——协程

原文链接:https://baijiahao.baidu.com/s?id1649450510185145678&wfrspider&forpc Python并发编程一直是进阶当中不可跨越的一道坎,其中包括进程、线程、协程,今天我们就来聊一聊协程。协程的定义很简单,从头到尾只有一条…

LeetCode 804. 唯一摩尔斯密码词(哈希+set)

文章目录1. 题目2. 解题1. 题目 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “a” 对应 “.-”, “b” 对应 “-…”, “c” 对应 “-.-.”, 等等。 为了方便,所有26个英文字母对应摩尔…

Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(二)

这篇文章主要针对http://android.xsoftlab.net/training/scheduling/alarms.html#tradeoffs中的Scheduling Repeating Alarms一文进行大体翻译: Alarms(基于AlarmManager类)可以使你的应用在正常的生命周期之外执行基于时间的任务。举个例子,你可以使用…

Dataset、IterableDataset 读取大数据的思路

一、单进程读取数据 Dataset 在数据量很大,无法将全部数据加载到内存的情况下,可以在init中读出表数据行数,在__len__设置为长度返回,在__getitem__中根据idx读表,idx就可以表示读取的表的行数,一般在读表…

计算机基础晦涩难懂?那你是没看他的图解文章!

这年头,写计算机基础的人好之又少,能把枯燥无味的计算机基础写的通俗易懂的人更是少,而就有一位叫「小林coding」的公众号横空出世,真的是一股清流,他酷爱「图解」计算机基础文章,真正做到了图解&#xff0…

Litho在美团动态化方案MTFlexbox中的实践

1. MTFlexbox MTFlexbox是美团内部应用的非常成熟的一种跨平台动态化解决方案,它遵循了CSS3中提出的Flexbox规范来抹平多平台的差异。MTFlexbox适用于重展示、轻交互的业务场景,与现有HTML、React Native、Weex等跨平台方案相比,MTFlexbox具备…

服务器部署docker

服务器部署docker docker简介## 可以把docker是一个容器,可以让开发者将自己的项目部署到这个容器中,最常用的场景是将自己的后端项目部署到服务器的时候会将其打入docker镜像中,可以理解为一个开销更小的虚拟机。 docker好处## 可以轻易地让…

LeetCode 461. 汉明距离(异或^ 与)

文章目录1. 题目2. 解题1. 题目 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 给出两个整数 x 和 y&#xff0c;计算它们之间的汉明距离。 注意&#xff1a; 0 ≤ x, y < 2^31.示例:输入: x 1, y 4输出: 2解释: 1 (0 0 0 1) 4 (0 1 0 0)…

论文浅尝 | NumNet: 一种带有数学推理的机器阅读理解模型

论文笔记整理&#xff1a;吴林娟。来源&#xff1a;EMNLP2019论文链接&#xff1a;https://arxiv.org/pdf/1910.06701.pdf开放源码&#xff1a;https://github.com/ranqiu92/NumNet概述本文提出了一个将数学推理融入机器阅读理解的模型——NumNet&#xff0c;其中利用数字感知的…

Android官方开发文档Training系列课程中文版:构建第一款安卓应用之入门指南

入门指南 欢迎来到安卓开发训练课&#xff0c;在这里你可以找到一系列课程来描述如何使用现有的代码示例来重新适用到你的APP上&#xff0c;你可以在左侧的导航栏顶部看到在若干个大项里有若干个有组织的子项课程。(导航栏请参见官方文档的导航栏) 在第一个大项里&#xff0c…

2021,你好哇!发个小红包可好~

小伙伴们&#xff0c;大家新年快乐哇&#xff5e;凡是过往皆序章&#xff0c;所有将来皆可盼。2020磨难太多&#xff0c;就祝大家2021多吃不胖叭&#xff01;原创即正义&#xff01;2020年对卖萌屋来说是非常不平凡的一年。这一年的时间里&#xff0c;卖萌屋坚守内容创作的初心…

降低软件复杂性一般原则和方法

一、前言 斯坦福教授、Tcl语言发明者John Ousterhout 的著作《A Philosophy of Software Design》[1]&#xff0c;自出版以来&#xff0c;好评如潮。按照IT图书出版的惯例&#xff0c;如果冠名为“实践”&#xff0c;书中内容关注的是某项技术的细节和技巧&#xff1b;冠名为“…