【计算机网络】TCP IP通信处理过程

1.数据包首部

每个分层中都会对所发送的数据附加一个首部,其中包含了该层必要的信息,如发送端地址、接收端地址以及协议等相关信息。
1


2.发送数据包

1)应用程序处理

进行编码处理(相当于表示层功能),管理何时建立通信何时发送数据等功能(相当于会话层功能)。建立连接后将数据发送给下一层的TCP,再做实际的转发处理。

2)TCP模块的处理

TCP根据应用的提示,负责建立连接、发送数据以及断开连接。提供可靠传输。

在数据前端附加一个TCP首部,包括源端口号、目标端口号(用以识别发送主机跟接收主机上的应用)、序号以及校验和(判断数据是否被损坏)。再将数据发送给IP。

3)IP模块的处理

IP在TCP传过来的数据前附加IP首部,包括接收端IP、发送端IP、上层协议等信息。

IP包生成后,参考路由控制表决定接收此IP包的路由或主机。随后将数据发送给连接这些路由器或主机网络接口驱动程序,以实现真正的数据发送。

如果不知道接收端MAC地址,则通过ARP查找。

4)网络接口(以太网驱动)的处理

在接收到的数据前面附加以太网首部进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据协议。发送处理中的FCS由硬件计算,添加到包的最后。FCS为了判断数据包在传输过程中是否被破坏。
2


3.经过数据链路的包

包流动时,从前往后依次被附加了以太网包首部、IP包首部、TCP包首部(或UDP包首部)以及应用自己的包首和数据。而包的最后则被添加了以太网包尾。

每个包首部中至少包含两个信息:一个是发送端和接收端地址,另一个是上一层的协议类型。

经过每个协议分层时,都必须有识别包发送端和接收端的信息。以太网会用MAC地址,IP会用IP地址,而TCP/IP则会用端口号作为识别两端主机的地址。


4.数据包接收处理

包的接收流程是发送流程的逆序过程。

1)网络接口(以太网驱动)的处理

主机接收到以太网包以后,首先从包首部找到MAC地址判断是否为发给自己的包。如果不是则丢弃数据。

如果是发给自己的包,就查找包首部中的类型域,确定传送过来的数据类型,传给相应的子程序进行处理(若是IP类型作为传给IP,若是ARP类型则传给ARP处理),若没有对应的类型,则丢弃数据。

2)IP模块的处理

IP模块收到包以后,做相似处理。如果包首部的IP地址与自己的IP地址匹配,则接收数据并查找上一层协议。如果上一层是TCP就传给TCP处理,如果是UDP则传给UDP处理。对于路由器,往往接收端地址不是自己的地址,此时需要借助路由控制表转发数据。

3)TCP模块的处理

TCP模块首先会计算校验和,判断数据是否被破坏。然后检查是否按照序号接收数据。最后检查端口号,确定具体的应用程序。

数据接收完毕后,接收端会发送一个“确认回执”给发送端。如果该信息一直未到达,那么发送端会认为接收端没有接收数据而一直反复发送。

数据完整地接收以后,会传给由端口号识别的应用程序。

4)应用程序的处理

接收端应用程序会直接接收发送的数据。如果接收正常,会返回“处理正常”的回执,否则会发送相应的错误信息。
3

——《图解TCP IP》学习笔记

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

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

相关文章

感觉自己越来越浮躁

重新审视自己的技术走向,不得不承认,越来越向上层迈进。但是这不是我喜欢的,一味的追求快速开发,希望自己的开发速度能一个人顶10个人,但是往往容易在项目中迷失自己,很希望能快点结束这段噩梦般的项目&…

uva 12627——Erratic Expansion

题意:一开始有1个红气球,每小时一个红气球都会变成3个红气球和1个蓝气球,1个蓝气球会变成4个蓝气球,问k个小时后a行到b行的红气球的数量。 思路:递推。a为偶数时,计算a1到b以及a本行的红气球数。b为奇数时&…

【计算机网络】数据链路相关技术

1.MAC地址 MAC地址长48字节。在使用网卡的情况下,一般会将MAC地址烧入到ROM中,任何一个网卡的MAC地址都是唯一的。例如 00:10:5A:70:33:61 MAC地址的3~24位表示厂商识别码,每个NIC厂商都有特定唯一的识别数字。25~48位是厂商内部为识别每个…

uva 714——Copying Books

题意:把一个m个整数的序列划分成k个连续非空的子序列,使得子序列和的最大值最小。 思路:二分。遇到最大值最小大多都二分了,让划分的子序列都不超过x,根据x来judge最终结果k个是多还是少,然后二分来调整x直…

[JavaScript]让footer总是停留在页面的底部(footer all the way at the bottom of the page)

在网页的底部总是保留着公司的版本信息,如何是这部分信息来实现呢?下面的一段javascript演示了如何让footer总是停留在页面的底部。这段代码我在实际使用的时候不是特别的完美,在包含有其他javascript控制的页面和控件的时候会出现重叠的现象…

【计算机网络】IP地址

IP地址的基础知识 在TCP/IP通信中,IP地址用于识别主机和路由器。 1.IP地址的定义 IPv4地址为32位,IPv6地址为128位。(以下以IPv4为例) 将32位的IP地址分为4组,每组8位,每组间用“.”隔开,再…

uva 1451——Average

题意:给定一个长度为n 的01串,然后选一个长度至少为L的子串,使得子串的平均值最大。 思路:单调队列。如果把所有的前缀和都求出来,那么所求即为max((s[j] - s[i]) / (j - i)) ,转化成图也就是求斜率最大的那…

近期工作:帮忙师兄

C# 获取机器硬件状态简单的解释器 C# XML读写转载于:https://www.cnblogs.com/anf/archive/2005/12/14/296880.html

【操作系统】哲学家就餐问题

问题 有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子&#xff0…

uva 11134——Fabled Rooks

题意:给定一个n*n的期棋盘放n个车,要求任意车之间不能相互攻击,并且每个车都在相应的方框内。 思路:贪心。因为没有对角线的条件约束,所以放的行号和列号没有影响。那么单独求出来行号和列号即可。对于每一行&#xff…

VC.NET 字节对齐设置

项目->属性->C/C->代码生成->结构成员对齐 转载于:https://www.cnblogs.com/smartstone/archive/2005/12/14/296909.html

java 设计作业——学生类的基本练习

设计要求: 建立一个学生类,有姓名、学号、3门课成绩、总分等信息,能输入输出学生数据,并能对总分进行排序,打印名次。思路:老师给的思路全部都封装在了一个类中,我写的则分成了两个类&#xff0…

linux下使用c++操作mysql

关于mysql的基础知识可以参考 mysql基础 首先,需要确保已安装mysql-server,mysql-client,mysql-devel。 一、常用类型介绍 1. MYSQL 用于定义一个mysql对象,便于后续操作确定要操作的数据库是哪一个。 MYSQL mysql; //mysql标…

初来乍到!各位博客朋友多多支持!

本人真名:陈伟峰baiguli的中文是:白骨礼,意思是做人坦白、真诚、有决心、有毅力、以礼待人。自从有了互联网,个人名称就换来换去,曾经用过:闪电行动、闪电,但QQ号始终没变:23771505。…

java数字转换成字符串

各种数字类型转换成字符串型: String s String.valueOf( value); // 其中 value 为任意一种数字类型。 字符串型转换成各种数字类型: String s "169"; byte b Byte.parseByte( s ); short t Short.parseShort( s ); int i Integer.parseI…

天空的颜色和大气散射

天空的颜色采用"A Practical Analytic Model for Daylight"建造的模型计算。地形颜色的大气散射采用"Rendering Outdoor Lght Scattering in real Time"介绍的方法计算。A Practical Analytic Model for Daylight中的模型通过太阳的方位,Zenith…

hexo本地博客的转移

1. 复制配置文件 将原来的配置文件进行备份,只需要将文件夹 source、themes和配置文件_config.yml备份即可。 2. 安装Node.js sudo apt-get install nodejs sudo apt-get install npm 3. 安装hexo sudo npm install -g hexo 4. 新建文件夹,cd进入 …

K8S 外部访问配置、 Ingress、NodePort

将K8S部署应用提供给外部访问一般有三种方式: NodePort 暴露端口到节点,提供了集群外部访问的入口LoadBalancer 需要负载均衡器(通常都需要云服务商提供,裸机可以安装 METALLB 测试)Ingress 统一管理 svc的外部访问&am…

java 设计作业——简单计算器

设计要求: 设计一个计算器,用GUI画出来一个图形界面,有两个输入框,一个输出框,有4个加减乘除按钮,实现简单的加减乘除功能。 code: import java.awt.*; import java.awt.event.*; import java.…

有感于最近一个朋友买股票大亏

投资首先是要看退出机制通畅不通畅、其次才是看收益高不高转载于:https://www.cnblogs.com/darzui/archive/2005/12/30/308300.html