TCP/IP简介

TCP/IP简介

 

OSI的“实现”:TCP/IP参考模型

并不完全符合OSI的七层参考模型,但我们可以理解为OSI的一种实现

 

TCP/IP协议简述

在很多情况下,它只是利用IP协议进行通信时,所必须用到的协议群的统称,具体来说,IP、http、ftp、UDP、TCP都属于TCP/IP协议,

它们与TCP/IP协议的关系紧密,是互联网必不可少的组成部分,TCP/IP一词泛指这些协议,因此TCP/IP协议为网际协议群。

OSI模型注重通信协议必要的功能时什么,而TCP/IP协议更强调在计算机上实现协议应该开发哪种程序。

TCP/IP在数据传输中和OSI一样,TCP/IP每个分层中都会对所发的数据附加一个头部,在这个头部中包含了该层的必须信息,如发送的目标地址以及协议相关信息,

通常为协议提供信息的为报头的首部,所要发送的内容为数据,从下一层角度看,数据被传送到接收端后,再层层解套出来。

 

网络数据处理流程

从应用层开始都会对传输的数据头部进行处理,加上本层的一些信息,最终由物理层通过以太网电缆等介质将数据解析成比特流在网络中传输;

数据传递到目标地址并自底向上将先前对应的头部给解析分离出来。

 

IP协议

IP协议是无连接的通信协议,它不会占用两个正在通信的两个计算机之间的通信线路,这样IP就降低了对网络线路的需求,

每条线都可以同时满足许多不同计算机之间的通信需求,通过IP,消息或其他数据会被分隔成较小的独立的包,

并通过Intel网在计算机之间传送,IP负责将每个包路由到它的目的地,但是IP协议没有做任何事情来确认数据包是否按顺序发送或包是否被破坏,

所以IP数据包不可靠,需要它的上一层协议来控制, 传输层TCP协议。

 

TCP协议

(1)面向连接的、可靠的、基于字节流的传输层协议 

(2)将应用层的数据流分隔层报文段发送给目标节点的TCP层

  说明:数据传输时应用层向TCP发送数据流,然后TCP把数据流分隔成适当长度的报文段,报文段长度受该计算机连接的网络

  数据链路层的最大传输量及MPU的限制,此后TCP把结果包传递给IP层,由IP层通过网络将包传送给目标节点的TCP层。

(3)数据包都有序号,对方收到则发送ACK确认,未收到则重传

  说明:TCP为了保证不丢失包就给每个包一个序号即seq num,同时序号也保证了传送到目标节点包的按序处理,

  接受端实体对已经成功收到的包发回一个相应的确认即ACK确认,如果发送端实体在合理的往返时间及RTT内未收到确认,

  那么对应的数据包就会被假定为丢失,并且将会对其进行重传。

(4)使用校验和来校验数据在传输过程中是否有误

  说明:TCP用一个校验和函数来就校验数据是否有错误,在发送和接收时都要计算校验和

 

TCP报头文

 

Souce port

源端口,2个字节

 

Destination port

目标端口,2个字节

 

说明:TCP, UDP数据包都不包含IP地址信息,因为那是IP层上的事(IP地址信息是网络层的工作),但TCP,UDP都有源端口和目标端口,端口属于传输层的范畴。

两个进程在计算机内部进行通信可以有管道、内存共享、消息队列等方法,两个进程能够进行通信最基本的前提是能够唯一标识一个进程,

通过这个唯一标识的进程找到对应的进程。在本地通信中,我们可以使用PID即我们的进程标识符(进程号)进行唯一标识一个进程,但PID

只在本地唯一,如果两个进程放在两个不同的计算机,让它们进行通信,PID就不够用,这样就需要另外一个手段:在传输层中使用协议端口号。

IP层的ip地址可以唯一标识主机,而TCP协议和端口号可以唯一标识主机中的一个进程,这样我们可以通过IP地址+协议+端口号唯一标识网络中

的一个进程。一些场合把唯一标识模式称为套接字。通信的重点是应用进程,但我们只要把要传送的报文交到目的主机中某个合适的端口,剩下的

工作就交给TCP来完成。

 

Sequence Number

4个字节

说明:TCP连接中传送的字节流中的每个字节都是按顺序标号的,例如一段报文的seq num是107而携带的数据共有100字段,

那么下一个报文段其seq num就应该是207开始

 

Acknowledgement Number

ACK确认号,4个字节

说明:期望收到对方的下一个报文的第一个数据字节的序号,例如B收到了A发送过来的报文,其序列号字段为301,而数据长度为200字节,

这表明B正确的收到了A发送301~500为止的数据,B期望收到A的下一个序号为501,于是B在发送给A的确认报文段中AC Num为501.

offset即数据偏移,由于头部有可选字段,长度不固定,因此它指出TCP报文的数据距离TCP报文的起始数有多远,Reserved为保留域。

 

TCP flags

URG:紧急指针标志,为1表示紧急指针有效,为0表示紧急指针无效

ACK:确认序号标志,为1表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段

PSH:push标志,为1表示带有push标志的数据,指示接受方在接收到该报文段后应尽快将这个报文段交给应用程序而不是在缓存区排队

RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接或者用于拒绝非法的报文段和拒绝连接请求

SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1, ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带确认即SYN=1, ACK=1

FIN:finish标志,用于释放连接,为1时表示发送方没有数据发送了,关闭本方数据流

 

window窗口

指滑动窗口的大小,用来告知发送端接收端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制

 

CheckSum

检验和,对整个TCP报文段包括TCP头部,TCP数据以十六位进行计算所得,由发送端计算存储并由接收端进行验证

 

Urgent Pointer

当TCP FLAGS中的URG为1时才有效,指出本报文段中的紧急数据的字节数

 

TCP Options

TCP可选项

 

转载于:https://www.cnblogs.com/marton/p/10851945.html

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

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

相关文章

Spring-Cloud 学习笔记-(4)负载均衡器Ribbon

目录 Spring-Cloud 学习笔记-(4)负载均衡器Ribbon1、前言2、什么是负载均衡2.1、问题分析2.2、什么是Ribbon3、快速入门3.1、实现方式一3.1.1、修改代码3.2、实现方式二3.2.1、启动类3.2.2、调用代码3.2.3、测试3.2.4、实现原理3.2.5、断点调式3.3、修改…

‘仿微信发表朋友圈’项目中登录功能的业务逻辑

登录功能 手机号验证码都通过后端验证后 返回用户数据 登陆成功 成功后 调用store中的setUser方法 store中的setUser方法 将后端返回的用户信息存储到localStorage中 同时登录成功后服务器会将token自动存入我们的cookie中 有过期时间 在我们请求需要登录的接口时将cookie中的…

kubernetes--配置文件

转载于:https://www.cnblogs.com/caiciadeliliang/p/10993388.html

微信动态中的背景图更换

初衷: 图一中的红框中的部分,作为用户自定义的背景图,如果用户没有上传也会为其自动设置一张背景图,当用户点击时则会出现图二中的选项 ,点击取消则选项消失,点击从相册选择则会跳转本机的相册&#xff0c…

大数据学习——akka自定义RPC

实现 package cn.itcast.akkaimport akka.actor.{Actor, ActorSystem, Props} import akka.actor.Actor.Receive import com.typesafe.config.ConfigFactoryimport scala.collection.mutableimport scala.concurrent.duration._class Master(val host: String, val port: Int) …

从Client应用场景介绍IdentityServer4(一)

从Client应用场景介绍IdentityServer4(一) 原文:从Client应用场景介绍IdentityServer4(一)一、背景 IdentityServer4的介绍将不再叙述,百度下可以找到,且官网的快速入门例子也有翻译的版本。这里主要从Clie…

开发常用代码笔记

Vue 使用moment插件对时间进行格式化(全局设置) 下载插件 npm install moment --save 在main.js中引入插件 import moment from ‘moment’ 在main.js中定义全局过滤器 Vue.filter(dataFilter,function (dataStr,patten YYYY-MM-DD HH:mm:ss) {retur…

微信小程序——账号及开发工具

1. 注册微信小程序账号 点击我进入微信公众平台 进入后点击立即注册 注册成功且登录后进入小程序管理后台 2. 安装开发者工具 点击进入开发文档 进入安装开发工具(稳定版本) 一路默认下一步进行安装 3. 开发者工具的使用 使用注册微信小程序的微信号…

CSS注意的地方

content-box和border-box的区别 2018年02月27日 22:20:16 sulingliang 阅读数:8011盒子模型 盒子宽度:paddingbordercontent-width 盒子高度:paddingbordercontent-height 如图所示 盒子模型content-box 说明:在内容宽度和高度之…

机器学习笔记(6) 线性回归

先从最简单的例子开始,假设我们有一组样本(如下图的一个个黑色的圆点),只有一个特征,如下图,横轴是特征值,纵轴是label。比如横轴是房屋面积,纵轴是房屋价格. 现在我们要做什么呢?我们试图找到一条直线yaxb,可以尽量好的拟合这些点. 你可能要问了,为啥是直线,不是曲…

仿微信朋友圈项目梳理

项目功能简介: 用户通过手机号验证码进行登录和注册 可以浏览动态列表中的所有动态 登录成功后用户可以发表自己的动态 也可以对自己认可欣赏的动态进行点赞和评论 也可以通过动态结识志同道合的朋友 进行聊天和探讨 前端:采用Vue框架搭建 weui进行页面…

echarts鼠标事件以及自定义数据获取

事件添加方法: 对应官网位置:https://www.echartsjs.com/api.html#events 鼠标事件包括 click、dblclick、mousedown、mousemove、mouseup、mouseover、mouseout、globalout、contextmenu。 myChart.on(click, function (params) {console.log(params); …

[数学]点、线、面分割问题

平面分割问题 p条直线相交于一点时,分割的图形有 2*(n-1) 个,此时再加一条直线,在 2*(n-1) 的基础上再加 n条,此时为2*n n条曲线,其中有m条相交于一点,每两个曲线都交于两点 平面上有n条直线,且…

移动开发

1.移动端基础 1.1 浏览器现状 PC端浏览器 360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器(停止服务)、搜狗浏览器、IE浏览器 移动端浏览器 UC、QQ浏览器、欧朋浏览器、百度手机浏览器、360、搜狗、猎豹、谷歌等其他手机自带的浏览器 国…

Django之路由系统

Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。 你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。 URLconf配置…

微信小程序——操作数据库

案例一:统计用户的访问次数 业务需求: 统计每个用户对程序的访问次数将访问次数存储到数据库中访问次数应该与用户进行关联 业务逻辑: 如果用户是第一次访问此程序,向数据库添加一条记录:{openid:45454…

shop--12.阿里云部署以及域名绑定

一、申请阿里云服务器(1)PC访问阿里云https://www.aliyun.com/,申请阿里云帐号(可以用您的支付宝帐号登录,因为支付宝帐号已经进行了实名认证,使用起来更方便)并登录(2)找…

微信小程序——获取用户的运动步数

程序获取用户信息步骤 点击参考微信文档中的授权首先程序先向用户申请访问哪些权限用户做出选择后返回给程序程序携带权限访问服务器如果用户允许则返回信息如果用户为允许则不返回 自定义函数getUserRun 为获取用户的微信运动数据 页面加载调用此函数函数中执行下面操作 1…

第一次个人作业

该作业所属课程:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2作业要求地址:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3340团队名称:脑壳痛 作业的目标 1.通过测试其他组的软件项目学习其…

微信小程序——解决上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。 (7f2d9d2d-5eac-4575-9n57-acd66cfa587g

1. 上传部署我们的云函数 2. 报错 错误信息为:Error: ResourceNotFound.Function, 未找到函数版本,请创建后再试。 (7f2d9d2d-5eac-4575-9b57-acd66cfa587e) 3. 原因 原因是可能我们在调试的时候不小心将我们开发控制台中的云函数删除了 4. 解决办法…