### OSI:open system interconnection ###

开放系统互联网模型是由ISO国际标准化组织定义的网络分层模型,共七层

1. 物理层:物理定义了所有电子及物理设备的规范,数据传输单位为比特(b),本层定义规范有EIA/TIA RS-232、RJ-45等,实际是由设备如网卡等
2. 数据链路层:对物理层收到的比特流进行数据成帧。提供可靠的数据传输服务,实现无差错数据传输。本层数据单位为帧(frame)。本层规范SDLC、PPP、STP等,使用设备如switch交换机等
3. 网络层:将各个子网之间的数据进行路由选择,分组与重组。本层数据传输单位为数据包(packet)。属于本层的规范有IP、IPX、IGMP等。使用设备如路由器
4. 传输层:提供可靠的数据传输服务,检测路由器丢弃的包,然后产生一个重传请求,能够将乱序收到的数据包重新排序
5. 会话层:管理主机之间会话过程,包括会话建立、终止和会话过程中的管理,传输单位(SPDU)
6. 表示层:对网络传输的数据进行变换,使得多个主机之间传送的信息能够互相理解,包括数据的压缩、加密、格式转换等,传输单位(PPDU)
7. 应用层:应用层与应用程序界面沟通,以达至展示给用户的目的,在此常见的协议有:HTTP、HTTPS、FTP、SSH、POP等,传输单位(APDU)

### TCP/IP四层模型 ###

1. 链路层:类似OSI中物理层和数据链路层的集合,主要规范:ARP、RARP
2. 网络层:类似OSI中网络层,主要规范:IP、ICMP、IGMP
3. 传输层:类似OSI中传输层,主要规范:TCP、UDP
4. 应用层:类似OSI中会话层、表示层和应用层的集合,主要协议例如:ftp、telet、qq等

#### 端口 ####

1. 众所周知端口(Well Known Ports):从0到1023,这些端口由IANA分配和控制,通常这些端口明确表明了某种服务,例如:21端口为ftp服务
2. 注册端口:从1024到49151,这些端口不受IANA控制,但有IANA登记并提供使用情况清单,许多服务绑定于这些端口,这些端口同样用于许多其他的目的,例如:1433 Microsoft SQL服务端口
3. 动态或私有端口:49152到65535,IANA不管这些端口,实际上,机器通常从1024起分配动态端口,但也有例外,SUN的RPC端口从32768开始

#### 协议说明、封装、分用 ####

MTU:以太网最大数据传输单元
ICMP:传递差错信息、时间、网络信息等控制数据
ARP:地址解析协议,映射IP地址到MAC地址
RARP:地址解析协议,映射MAC地址到IP地址
封装: 应用层->链路层 (IP地址转换为MAC地址)
分用: 链路层->应用层 (MAC地址转换为IP地址)

#### 主机A ping 主机B 数据在网络中的传输说明 ####

1. 应用程序判断ping的是主机名还是IP地址,如果是主机名会调用gethostbyname()解析主机B,将主机名转换成一个32位的IP地址,这个过程叫做DNS域名解析
2. ping程序向目标IP地址发送一个ICMP的ECHO包
3. 将目标主机的IP地址转换为48位硬件地址,在局域网内发送ARP请求广播,查找主机B的硬件地址
4. 主机B的ARP协议层接收到主机A的ARP请求后,将本机的硬件地址填充到应答包,发送ARP应答到主机A
5. 发送ICMP数据包到主机B
6. 主机B接收到主机A的ICMP包,发送响应包
7. 主机A接收到主机B的ICMP响应包

### IP数据报格式 ###

1. 版本:IPv4字段值为4,IPv6字段值为6
2. 首部长度:以32位的字为单位,该字段长度为4位,最大值为15,所以首部长度最大为60个字节
3. 总长度:该字段长度为16位,以字节为单位,该字段长度包含IP的头部和数据部分,IP数据报最大可达65535个字节
4. 标识:16位标识,用来标识一个IP包,每发送一个此值会加1
5. TTL(TIme To Live):表示数据报最多可经过的路由器的数量,每经过一个路由器,TTL值减1,减为0时丢弃,并发送ICMP报文给源主机,TTL可以避免数据报在路由器之间不断循环
6. 协议类型:表示IP层上承载的是哪个高级协议,协议栈知道交给哪个层的协议处理,1 ICMP 2 IGMP 6 TCP 17 UDP
7. 网际校验和:接收方接收到发送方的数据后按照校验算法对数据进行校验,检验数据在传输过程中是否发生错误

### TCP报文格式 ###

1. 源端口号与目的端口号:源端口号和目的端口号,加上IP首部的源IP地址和目的IP地址唯一确定一个TCP连接
2. 序号:序号表示在这个报文段中的第一个数据字节序号
3. 确认号:仅当ACK标志为1时有效,确认号表示期望收到的下一个字节的序号
4. 头部长度:4位 ,TCP头部最多60个字节
5. 保留位:6位,必须为0
6. 6个标志位:URG-紧急指针有效、ACK-确认序号有效、SYN-发送连接的同步序号、FIN-表示要终止一个连接、RST-连接重置、PSH-接收方将这个报文交给应用层
7. 窗口大小:通过窗口大小来达到流量控制
8. 校验和:对TCP头与数据进行校验

### TCP连接建立三次握手 ###

TCP A 发送SYN a->TCP B //A请求建立连接
TCP B 发送SYN b ACK a+1 ->TCP A //确认收到请求,并请求A回复
TCP A 发送ACK b+1 ->TCP B  //对B的请求进行回复

### TCP连接终止的四次握手 ###

TCP A 发送FIN x ACK y->TCP B //A请求终止连接
TCP B 发送ACK x+1 ->TCP A //B收到终止请求并回复给A
TCP B 发送FIN y ACK x+1->TCP A  //B根据A的终止请求也请求终止连接
TCP A 发送ACK y+1->TCP B //A收到终止请求并回复给B

### 滑动窗口协议(流量控制) ###

1. 通告接收窗口:预防应用程序发送的数据超过对方的缓冲区,接收方使用的流量控制
2. 拥塞窗口(cwnd):预防应用程序发送的数据超过网络所能承受的能力,发送方使用的流量控制
3. 发送窗口取两者较小值
4. 慢启动阈值(ssthresh:slow start threshold)
5. 慢启动阶段:cwnd从1开始按指数增长直到ssthresh
6. 拥塞避免阶段:cwnd按线性增长,直到拥塞,将cwnd=1,ssthresh减半

linux网络编程系列-TCP/IP模型的更多相关文章

  1. 【Linux 网络编程】TCP/IP四层模型

    应用层.传输层.网络层.链路层 链路层:常用协议 ARP(将物理地址转化为IP地址) RARP(将IP地址转换为物理地址) 网络层(IP层):重要协议ICMP IP IGMP 传输层:重要的协议TCP ...

  2. Linux网络编程系列-TCP传输控制

    滑动窗口(sliding window) 滑动窗口是用于流量控制的,发送端根据接收端的处理能力发送数据,不至于造成过多的丢包. 是发送方和接收方间的协调,对方的接收窗口大小就是自己的发送窗口大小. 在 ...

  3. Linux网络编程系列-TCP编程实例

    实例: client #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #inc ...

  4. 嵌入式linux的网络编程(1)--TCP/IP协议概述

    嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...

  5. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    [Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...

  6. 【转载】[基础知识]【网络编程】TCP/IP

    转自http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=27043 [基础知识][网络编程]TCP/IP iooops  胖友们楼主我又 ...

  7. 【Linux 网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数:对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三 ...

  8. 2015-07学习总结——网络编程(TCP/IP)

    之前学习的主要内容是单机上的处理,比如编程语言.游戏编程.数据库.多媒体编解码.其实对网络也有些接触,比如WWW.HTTP.UDP/TCP.RTP.RTMP.SNMP.FTP.单播组播.Telnet. ...

  9. 【网络编程】TCP/IP、UDP、网络概…

    计算机刚刚发明出来的时候,两台计算机之间是无法通信的,为了使计算机之间能够进行数据的交流,制定了OSI(Open SystemInterconnection)开放系统互联模型,而TCP/IP(我们所使 ...

随机推荐

  1. python2.7练习小例子(十九)

        19):题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? #!/usr/bin/python # -*- codi ...

  2. HBase 是什么

    Apache HBase™ is the Hadoop database, a distributed, scalable, big data store. HBase 是 Hadoop databa ...

  3. OpenCV代码提取:transpose函数的实现

    OpenCV中的transpose函数实现图像转置,公式为: 目前fbc_cv库中也实现了transpose函数,支持多通道,uchar和float两种数据类型,经测试,与OpenCV3.1结果完全一 ...

  4. Java重写构造方法

    public class TestSuper { public static void main(String[] args) { new ChildClass("alex", 1 ...

  5. 【好帖】 Mark

    1. 管理篇 2. 程序员选择公司的8个标准 3. 实用工具 4. 离职跳槽 5. DBA 6. 做一个网站多少钱? 7. 十大算法 8. 寻求用户评价App的正确方法 9. 工程师忽略的隐形成本 1 ...

  6. Unity动态换装之Spine换装

    注:转载请注明转载,并附原链接 http://www.cnblogs.com/liaoguipeng/p/5867510.html 燕双飞情侣 一.动态换装原理 换装,无非就是对模型的网格,或者贴图进 ...

  7. linux常用命令补充详细

    1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: ls -a 列出目录所有文 ...

  8. AGV小车典型设计算法及应用

    1. AGV小车的发展背景 在现代化工业的发展中,提倡高效,快速,可靠,提倡将人从简单的工作中解放出来.机器人逐渐替代了人出现在各个工作岗位上.机器人具有可编程.可协调作业和基于传感器控制等特点,自动 ...

  9. 装机、UEFI双系统安装

    装机设置 设置默认中图标显示查看-选项-查看-应用到文件夹 控制面板-语言-管理输入法 word-选项-取消输入法设置处于活动状态word-字体-设置默认值 高DPI的显示屏,需要使用125%的缩放, ...

  10. 相关系数之杰卡德相似系数(Jaccardsimilarity coefficient)

    杰卡德相似系数(Jaccardsimilarity coefficient) (1)杰卡德相似系数 两个集合A和B交集元素的个数在A.B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B ...