tcp/ip知识点的总结

知识点搜集于网络,在加上自己的总结,还有很多不全,希望大家多提意见,共享学习!

一、TCP/IP是什么?

TCP/IP是一个协议族,而不是单独的协议。包括arp、ip、icmp、tcp、udp、http、ftp等协议

二、TCP/IP分层

      

 从上面两个图表中可以看出ARP和RARP协议处于的网络层次不同。由于IP协议使用了ARP协议,所以经常把ARP协议划归到网络层,但是ARP协议的用途是为了从网络层使用的IP地址解析出在数据链路层使用的硬件地址即MAC地址,所以有些地方也把ARP协议划归到数据链路层,但是一般情况下,我们还是把ARP和RARP协议划分到网络层,这个没有明确的界限。

网络接口层关键元素:MAC,网络层关键元素:IP,传输层关键元素:端口号

三、TCP/IP数据包的封装和分用

1、封装过程,协议栈从上到下,如图:

数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层收到数据都要增加一些首部信息(有时候还要增加一下尾部信息),最后到达以太网,也就是数据链路层,这时候把这这个比特流叫做帧。

2、数据分用过程,从协议栈由下往上,如图:

目的主机收到以太网数据帧后,首先去掉各层协议加上的报文首部,同时每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议

四、TCP协议的三次握手和四次挥手

1、三次握手

 

2、四次挥手

 3、为什么是三次握手,四次挥手?

握手3次原因:tcp中,一方接收到syn报文后,需向对方回应一个ack。三次握手中,第一个是syn报文,第二个是ack、syn报文,第三个ack报文。这样就都回应了ack,需要3次。

挥手4次原因:tcp中,一方接收到fin报文后,需向对方回应一个ack,并且tcp可以实现半关闭。4次挥手中,第一个fin报文,第二个ack报文(它可能还要继续传送数据),第三个是fin报文(它已经不需要继续传送数据了),第四个ack报文。这样就都回应了ack,需要4次

能否挥手3次:能。收到第一个fin报文后,它自己也不需要传送数据了,回应fin、ack报文,对方再回应ack,总共三次,挥手完毕。实际中抓报文,有很多这样的情况。

如果出现异常断开情况,那么会直接发送RST报文,这种情况是两次握手

五、TCP和UDP区别

1、TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后通过四次挥手结束连接。而UDP是无连接的
2、TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到
3、TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节
4、TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送速率
5、TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信
6、TCP面向的是字节流的服务,UDP面向的是报文的服务

六、TCP半连接状态(半开连接,半关连接)

半开连接:

TCP的半开连接是指TCP连接的一端异常崩溃,或者在未通知对端的情况下关闭连接,这种情况下不可以正常收发数据,否则会产生RST(后面内容我们在介绍RST)。
比如一个常见的情况是TCP连接的一端异常断电,就会导致TCP的半开连接。如果没有数据传输,对端就不会知道本端的异常而一直处于ESTABLISHED状态。
TCP半开连接是指发送了TCP连接请求,等待对方应答的状态,此时连接并没有完全建立起来,双方还无法进行通信交互的状态,此时就称为半连接。
由于一个完整的TCP连接需要经过三次握手才能完成,这里把三次握手之前的连接都称之为半连接。

半关闭连接:

TCP的半关连接是指TCP连接只有一方发送了FIN,另一方没有发出FIN包,仍然可以在一个方向上正常发送数据。这种场景并不常见,一般来说Berkeley sockets API调用shutdown()接口时候就会进入半关闭状态(调用常规的close()一般是期待完整的双向关闭这个TCP连接),shutdown()接口相当指示程序,本端已经没有数据待发送,所以我发送一个FIN到对端,但是我仍然想要从对端接收数据,直到对端发送一个FIN指示关闭连接为止。

 

                                                                                                                                                                                                                                                                                                                                                                                                              

转载于:https://www.cnblogs.com/stupidbug/p/8325472.html

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

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

相关文章

搜索引擎ElasticSearchV5.4.2系列一之ES介绍

相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2kibanaV5.4.2x-packV5.4.2安装 搜索引擎ElasticSearchV5.4.2系列三之ES使用 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎…

[译] 前端组件设计原则

原文地址:Front end component design principles 原文作者:Andrew Dinihan 文中示例代码:传送门 限于个人能力,如有错漏之处,烦请不吝赐教。 前言 我在最近的工作中开始使用 Vue 进行开发,但是我在上一家公…

imu_utils标定imu问题解决

在编译过程中遇到的一些问题可以参照这个女生的文章 https://blog.csdn.net/fang794735225/article/details/92804030 下面是imu_utils的主页,可以下载代码,也有使用步骤 https://github.com/gaowenliang/imu_utils 我下载了imu_utils主页最后面提供…

术语-服务:PaaS

ylbtech-术语-服务:PaaSPaaS是Platform-as-a-Service的缩写,意思是平台即服务。 把服务器平台作为一种服务提供的商业模式。通过网络进行程序提供的服务称之为SaaS(Software as a Service),而云计算时代相应的服务器平台或者开发环境作为服务…

PostgreSQL安装和简单配置

PostgreSQL安装与使用 目录 依赖包的安装源码编译和安装初始化数据库集簇简单配置依赖包安装 PostgreSQL源码安装依赖以下四个软件包 readline zlib flex bison 在Ubuntu中可是应用以下命令直接进行安装: sudo apt-get install libreadline6 libreadline6-dev zlib1…

1.App瘦身经验总结

为什么apk越来越大? 1.项目不断发展,功能越多,代码量增加的同时,资源文件也在不断的增多2.app支持的主流dpi越来越多,如ldpi、mdpi、hdpi、xh xxh xxxh等等,间接导致资源增多3.引入的第三方sdk或开源库越来…

研究相机和IMU坐标系变换

刚开始录制的数据时没有考虑相机和IMU之间的坐标变换,但是后来发现跟踪效果不好,去查验imu数据时,发现,我采集保存的imu数据格式没有和euroc数据集中的imu数据保存格式统一,所以需要研究的是在euroc用于数据采集的设备…

第五天:Swift拖动 item 重排 CollectionView

参考链接:https://www.jianshu.com/p/96f956f1479e 1 import UIKit2 3 enum VC: String {4 case ViewController5 case CollectionViewController6 7 func segueIdentifier() -> String {8 switch self {9 case .ViewController:10 …

MIT Kimera阅读笔记

这两天在调研SLAM的最新算法,找到了2019CVPR上的一篇文章,出自于MIT,因为要给其他同事讲解,所以就把文章的重点内容在我个人理解的情况下翻译了出来,有理解不到位的还请各位大佬多多批评指正。 最后附上了Delaunay Tri…

C#中的ForEach

public void ForEach(Action<T> action) 针对List<T>集合中的每个元素执行操作Action<T> action,Action<T>是只接受一个类型为T的传入参数返回值为void的委托,对于泛型List<T>来说,Action<T>中的类型与List<T>中的类型是相同的.acti…

哈希映射

哈希来源问题&#xff1a;关于统计一个字符串集合中&#xff0c;求出现次数最多的字符串思路&#xff1a;建立一个哈希映射&#xff08;HashMap&#xff09;&#xff0c;其键为"字符串"&#xff0c;值为"字符串出现次数"&#xff0c;然后遍历字符串集合&am…

1月28日云栖精选夜读 | 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码

如同我们去年12月在 Flink Forward China 峰会所约&#xff0c;阿里巴巴内部 Flink 版本 Blink 将于 2019 年 1 月底正式开源。今天&#xff0c;我们终于等到了这一刻。 热点热议 终于等到你&#xff01;阿里正式向 Apache Flink 贡献 Blink 源码 作者&#xff1a;技术小能手 发…

ZOJ-3537

题目大意&#xff1a;给你一个n (n<300) 边形&#xff0c;给出它所有的顶点坐标&#xff0c;让你把它划分成n-2个三角形的花费最小值&#xff0c;顶点 a 和 b 相连的花费为 abs(a.xb.x)*abs(a.yb.y)。 如果是凹多边形输出无解。 思路&#xff1a;先跑个凸包判断是不是凸多边…

你会等待还是离开(大理)---写的一个推文

你会等待还是离开 -----出发和遇见大理 上关花闹 下关风薰 苍山雪寂 洱海月迟 但闻肆季弦雀起 才吹小雨又需晴 现实很调皮&#xff0c;很容易就让人没有力气&#xff0c;就像变与不变&#xff0c;并不复杂&#xff0c;也不遥远&#xff0c;一个寒假的距离&#xff0c;一句话的力…

sudo rosdep init ERROR: cannot download default sources list from: https://raw.githubusercontent.com

安装上ros无法进行rosdep init.解决方法如下&#xff1a;https://zhuanlan.zhihu.com/p/77483614 因此&#xff0c;在/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py中顶部直接插入两行代码取消SSL验证 import ssl ssl._create_default_https_context ssl._crea…

YodaOS: 一个属于 Node.js 社区的操作系统

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> 大家好&#xff0c;很开心在这里宣布 YodaOS开源了。他将承载 Rokid 4年以来对于人工智能和语音交互领域的沉淀&#xff0c;并选择 Node.js 作为操作系统的一等开发公民&#xff0…

Android顶部粘至视图具体解释

不知从某某时间開始&#xff0c;这样的效果開始在UI设计中流行起来了。让我们先来看看效果&#xff1a;大家在支付宝、美团等非常多App中都有使用。要实现这个效果&#xff0c;我们能够来分析下思路&#xff1a;我们肯定要用2个一样的布局来显示我们的粘至布局。一个是正常的、…

在实际项目开发中keil的调试方法

转载2015-06-14 20:23:04 一.在keilc的调试状态下&#xff0c;如何观察各个片内外设的运行状态&#xff1f;如何修改它们的设置&#xff1f;​ 在调试状态下&#xff0c;点击Peripherals菜单下的不同外设选项命令&#xff0c;就会显示或隐藏对应外设的观察窗口。 在程序运行时&…

slam 常用数据集的帧率

1. kitti数据集的帧率约约为10fps,图像分辨率为1241x376 2. Euroc数据集的帧率约为20fps,图像分辨率为752x480 3.TUM数据集的帧率约为30fps, 图像分辨率为640x360 zed相机获取的HD图像的分辨率为1280x720p,获取的VGA图像分辨率为672x376,mynt相机获取的VGA图像的分辨率为640x…

小李飞刀:用python刷题ing....

叨逼叨 默认每天都要刷两道题。今天目标已完成。 第一题 26. 删除排序数组中的重复项难度&#xff1a;简单类型&#xff1a;数组 给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。不要使用…