几个概念

1.分层(我们使用四层模型更为贴合我们的实际网络)

分层是为什么,其实和公司中职位是一样的,不同职位的人做不同的事情,然后不同职位的人合起来,一起完成了数据传输的事情。

链路层  在这个层面,主机与主机的交互只认得硬件mac编号,并不认识IP。

网络层 IP   ICMP  IGMP

运输层 TCP  UDP

应用层 Telnet远程登陆,FTP文件传输协议(我们这个端口和那个端口的连接是用来干什么的,传输文件?那么可以使用FTP。传输文本?那么可以使用HTTP。应用层就是实际上对具体的程序之间的交互功能进行定义的层。)

 2.  接口 互联网上的每个接口必须有一个唯一的 I P地址

使用T C P / I P协议的应用程序通常采用两种应用编程接口( A P I):

s o c k e t和T L I(运输层接口:Transport Layer Interface)。

3. 封装 T C P传给I P的数据单元称作 T C P报文段或简称为 T C P段(T C P s e g m e n t)。

I P传给网络接口层的数据单元称作 I P数据报(IP datagram)。通过以太网传输的比特流称作帧(Fr a m e )。

 IP:网络协议

一.基本概念

所有的 T C P、U D P、I C M P及I G M P数据都以I P数据报格式传输。IP的就像给网络上每个机器一个门牌号,网络层,你可以把它理解为邮件运输工,它的职能就是负责把一包东西,从这个门牌运输到另外一个门牌。

不可靠(u n r e l i a b l e)的意思是它不能保证 I P数据报能成功地到达目的地。如果发生某种错误时,如某个路由器暂时用完了缓冲区, I P有一个简单的错误处理算法:丢弃该数据报,然后发送 I C M P消息报给信源端。任何要求的可靠性必须由上层来提供(如T C P)。

无连接  I P数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是 A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此 B可能在A到达之前先到达。

. 多路访问协议:
a) ALOHA协议: 纯 ALOHA协议和 时隙 ALOHA协议
b) 载波侦听多路访问协议 (CSMA):1-坚持式 CSMA、⾮坚持式 CSMA、p-坚持式 CSMA、
  带有冲突检测的 CSMA(CSMA/CD)

  CSMA/CA(避免冲突的 CSMA 协议):发送⽅先激发 RTS短帧,接收⽅收到后发送 CTS短帧,使接收⽅周围的站点在发送期间保持沉默避免冲突

但同样存在面向连接的虚电路和无连接的数据包。

二.路由算法

对应网络上也存在自适应算法(动态路由,根据网络状态刷新路由表)和非自适应算法(静态路由,可靠)。

Dijkstra最短通路算法,距离矢量DistanceVector算法,链路状态算法

内部⽹关路由协议 ( IGP,也叫域内路由协议) :
a) 路由信息协议( RIP):基于距离⽮量算法,例如 Bellman-ford 算法
b) 开放最短路径优先协议( OSBF):基于链路状态算法,例如 Dijkstra 算法
 
三.网络接口

IPv4 头标格式 :
a) 版本号 : 4bit,IPv4 填 4            b) 头标⻓度 :4bit,单位为 4 字节,范围 5-15,缺省值为 5
c) 服务类型 (TOS):8bit ,0          d) 总⻓度 :16bit ,单位字节, 描述 IP 分组的总⻓, 包括头和数据, 最⼤ 65535 字节,
e) 标识符 : 16bit,⽤于唯⼀标识分组       f) 标志 :3bit ,第 1 位未定义,第 2 位 DF 为 0 表示可分段,第 3 位 MF 为 1 表示还有分段
g) 段偏移 : 13bit,单位为 8 字节 ,取值 0-8191  h) ⽣存期( TTL):8bit ,单位秒
i) 协议 :8bit ,表示⾼层协议类型        j) 分组头校验 :16bit ,每 16 位相加,进位加到结果,最后取反
k) 源 IP 地址 和⽬的 IP 地址 :各32bit
 

网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。与 IP 协议配套使用的还有三个协议:

地址解析协议 ARP(Address Resolution Protocol)

网际控制报文协议 ICMP (Internet Control Message Protocol)

网际组管理协议 IGMP (Internet Group Management Protocol)

TCP传输层

传输层相比于网络层最大的不同就是引入了端口的概念。网络层只管发送地址和目的地址。但是发送主机上有可能有多个程序和同一个接收主机进行传输数据,怎么区分这多个程序呢?就引入了端口的概念。

传输层还有一个职能是定义发送方和接收方基本处理包的行为。上面说到网络层就相当于邮件运输工,它只负责把一包东西从一个地方放到另外一个地方,但是,这包东西是否送达了,送达之后接收方又有什么行为。这些都可以在传输层进行定义。注意,这里说的是可以,你也可以在传输层布不管这些,只做简单的基本封装四元组。你懂的,我说的就是UDP。

⽤户数据包协议( UDP):不可靠,⾼效. 常用于实时视频数据传播。单元称为数据报

传输控制协议( TCP):传输的数据单元称为数据段

                                       数据流传输、可靠、全双⼯、流量控制、拥塞控制

包的序号,用来解决网络包乱序(reordering)问题。

Acknowledgement Number就是ACK——用于确认收到,用来解决不丢包的问题。

Window又叫Advertised-Window,也就是著名的滑动窗口(Sliding Window),用于解决流控的。

TCP Flag ,也就是包的类型,主要是用于操控TCP的状态机的。

i. 源端⼝ /⽬的端⼝ :各 16bit
ii. 序列号 /确认号 :各 32bit
iii. 头标⻓度 :4bit ,单位是 4 字节
iv. 保留 :6bit,置零
v. URG:1bit ,指示紧急指针有效
vi. ACK:1bit ,指示确认段有效
vii. PSH:1bit ,告诉主机⽴即将数据段递交给应⽤进程
viii. RST:1bit ,重新连接
ix. SYN:1bit ,同步序列号,⽤于确认连接
x. FIN:1bit ,⽤于释放连接
xi. 窗⼝⼤⼩ :16bit,⽤于流量控制,指示确认后还可发送的字节数
xii. 检验和 /紧急指针 :各16bit

二、流量控制与滑动窗口

三、TCP建立连接和关闭的三次握手

client和server应该理解为发送方(客户端)和接收方(服务器)

建⽴连接:三步握⼿
a) 主机 1 向主机 2 发送序号 seq = x的连接请求 TPDU
b) 主机 2 答应连接请求, ack = x, seq = y
c) 主机 1 发送序列号 seq = x 的数据,并确认 ack = y
TCP协议的状态机

三. 拥塞阻塞 明明网络已经堵塞了,还一个劲地发送大量包,甚至重发,那么这个时候,大家都没得玩了。于是,TCP引入了拥塞窗口(cwnd)的概念。

流量控制:根据接收⽅的缓存容量来动态调整发送⽅的窗⼝⼤⼩,避免⼀个快速的发送⽅淹没⼀个慢速的接收⽅
拥塞控制:根据⽹络的承载容量来动态调整发送⽅的窗⼝⼤⼩,避免同⼀时刻发送⽅有太多的未被确认接收的
 算法:
慢启动在刚刚连接网络的时候,最好先慢慢检测网络情况,再确定发送包的数量。这就是我们说的慢启动算法。
   发送方从1个包开始,收到ACK,下次就发送2个包,收到这两个包的ACK(请注意,这里有可能只有一个ACK),下次就发送4个包。

“每收到一个ACK,拥塞窗口就增加一个报文段”。

当然上图的情况太理想,实际的情况,坑cwnd为2的请求发出去两个报文包的时候,先返回了一个ACK,然后cwnd这个时候就为3,发送方就会继续发送请求包。。。

 拥塞避免算法 

慢启动使得cwnd是呈指数增长。一定不可能是无限增长的,这里就有个阀值,超过这个阀值,就进入拥塞避免算法。

先说拥塞避免算法,拥塞避免算法说的是拥塞窗口的增加不再是“每收到一个ACK,拥塞窗口就增加一个报文段”。 而是“每收到一个ACK,cwnd = cwnd + 1/cwnd”。

快速回复算法

快速恢复算法是为了不要有一个重传就那么大响应。能尽快恢复到网络流畅时候稳定的状态。

其他

DNS域名查询类型 :
a) 递归查询 :每⼀个被请求的服务器如果没有记录, 就会向其它服务器查询, 并沿着
查询路径返回
b) 迭代查询 :本地服务器如果没有记录, 就向⾼级服务器查询, 被请求的服务器如果
没有记录就返回⼀个可供查询的服务器地址
FTP⽂件传输协议 :
a) 主动模式 :client 向 server 命令通道 21 端⼝, server 向 client 数据通道 20 端⼝
b) 被动模式 :client 向 server 命令通道 21 端⼝, client 向 server 数据通道> 1023

电⼦邮件相关协议 :
a) 消息交换的协议:
   i. 发送 email:简单邮件传输协议( SMTP)
   ii. 接收 email:
  1. 邮局协议第 3 版( POP3)
  2. Internet 消息访问协议( IMAP)
b) 消息格式的协议:
   i. RFC 822:基本的 ASCII的⽂本邮件
   ii. 多⽤途 Internet 邮件扩展( MIME )

tcpip协议的更多相关文章

  1. 图解TCP-IP协议

    本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 图1 TCP 三次握手四次挥手 图1 ...

  2. wireshark 抓包分析 TCPIP协议的握手

    wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...

  3. 漫谈TCPIP协议原理

    一.每次说道TCPIP协议,有能说会道者,总爱说三次握手,什么意思? 顾名思义,假设有两个机器A和B 1.当A发送给B一个包的时候,B接收到了,这个时候,B有两个选择,要么将包数据放入缓存,等待处理, ...

  4. TCPIP协议编程:基于UDP协议的局域网聊天工具的研发

    任务目标 聊天器采用客户端/服务器(C/S)模式: 客户端利用UDP与服务器相连,客户端与客户端之间通过UDP相互通信: 服务器端具有服务器端口设置维护客户端个人信息,记录客户端状态,分配账号等: 客 ...

  5. tcp协议 tcpip协议 http协议,IP,DNS,端口号

    每当看到HTTP协议,tcp/ip协议,TCP协议总是蒙圈:在这里先记录一下,方面自己查看 TCP协议:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接 ...

  6. 转载TCP-IP协议解释

    本文转载自 http://www.ruanyifeng.com/blog/2009/03/tcp-ip_model.html TCP/IP模型是互联网的基础, 理解 TCP/IP对理解互联网至关重要 ...

  7. 8.3 TCPIP协议族

    接下来我们要学习的内容是TCP/IP协议族.TCP/IP协议族在网络系统中是非常重要的.这一个协议族当中牵涉到许许多多的我们平常所用到的协议.TCP/IP呢它也有分层模型.然后我们讲到的就是三方面的内 ...

  8. 用生活例子来形象了解TCP-IP协议

    TCP/IP模型四层协议 与 邮件? 1.应用层——与用户直接打交道 类似 要寄的物件 2.传输层——处理和增加源数据并传输到IP层 类似 快递单信息 3.IP层——分配地址和传送数据 类似 分拣站分 ...

  9. 数据库TCPIP协议开了,但还是远程连不上

    可能是因为开着防火墙 把防火墙关掉,或者参考下面的链接,在防火墙添加例外 https://zhidao.baidu.com/question/394026326542219285.html

随机推荐

  1. Mac高效开发之iTerm2、Prezto和Solarized主题

    本文首发于个人网站:Mac高效开发之iTerm2.Prezto和Solarized主题 工欲善其事必先利其器,作为开发,我追求极致的高效,因此会在很多细节上追求效率,例如:命令行窗口敲命令的时候,如果 ...

  2. 设计模式C++描述----06.适配器(Adapter)模式

    一. 定义 适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. Adapter 模式的两种类别:类模式和对象模式. 二. 举例说明 实际中 ...

  3. Ubuntu16.04下升级Python到3.6

    转: 这里 有一篇帖子是说从源代码开始安装,这种方式原来尝试过,需要删除系统默认的软链命令,感觉比较粗暴,现在在想有没有更好的方式呢? 找到一个帖子:http://ubuntuhandbook.org ...

  4. 明解C语言 入门篇 第三章答案

    练习3-1 #include <stdio.h> int main() { int x; int y; puts("请输入两个整数."); printf("整 ...

  5. Java 数据类型和初始值

    Java 基本数据类型 byte.short.int.long.float.double.boolean.char byte 数据类型是8位.有符号的,以二进制补码表示的整数 short 数据类型是 ...

  6. 记一次C#调用C++踩过的坑

    一般来说,C#调用C++生产的dll,如下: C++的项目要设置为"导出dll的项目",而且导出的函数,一般为: extern "C" __declspec(d ...

  7. 「卡常」我T死了我好桑心,我不会卡常。

    我死了我死了我死了 puts(“Lrefrain==T”)

  8. python爬虫-携程-eleven参数

    携程-eleven分析 一.eleven的位置 通过对旁边栈的分析,它是在另一个js文件中调用的.那个js文件是一个自调用的函数,所以我们可以直接copy下来,用浏览器执行看看 执行运行是会报错的,u ...

  9. formdata,ajax提交数据

    var data = document.getElementById("#dataForm"); var formData = new FormData(data); var ac ...

  10. 持续集成Gitlab CICD Runner&Jenkins

    目录 使用Gitlab Runner实现 再要部署的服务器上安装 gitlab runner 下载可执行文件 设置可执行权限权限 创建用户 运行服务 注册 Runner 到gitlab上找到需要用的U ...