网络编程系列第(一)篇---TCP/IP

1. TCP/IP是什么

TCP/IP,中文名网络通讯协议
TCP/IP是一个协议组,而不仅仅只是TCP协议+IP协议的组合
这个协议组可分为四层,分别是网络接口层,网络层,传输层,应用层。

顺便提一下,osi的参考模型将网络分为7层,分别是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

两个参考模型的对应关系如下表

osi tcp/ip
物理层,数据链路层 网络接口层
网络层 网络层
传输层 传输层
会话层,表示层,应用层 应用层

2. TCP/IP有何用

简单地讲,正是因为tcp/ip的存在,两个终端才能通过互联网进行远距离的数据交互。

那么数据想要从终端A传到终端B,需要哪些条件了?

  1. 待传输的数据
  2. 终端B的地址
  3. 一条连通的网络通道

既然条件已经具备了,那么就该tcp/ip发挥它的作用了,在这个传输过程中,tcp/ip的每一层都各司其职。

应用层

负责为应用程序提供访问网络服务的接口。
常见的协议包括以下几种
Telnet:远程登录协议
HTTP:超文本传输协议
FTP:文件传输协议
SMTP:简单邮件传输协议
DNS:域名服务协议
NFS:网络文件系统协议

传输层

负责建立和维护端到端的连接
常见的协议包括
TCP:传输控制协议
UDP:用户数据包协议

网络层

负责网络间的寻址和路由选择
常见的协议包括
IP:网际协议
ICMP:网际控制消息协议
ARP:地址解析协议
RARP:逆向地址解析协议

网络接口层

负责二进制数据流的实际传输
常见的协议包括
HDLC:高级链路控制协议
PPP:点对点协议
SLIP:串行线路接口协议

3. TCP/IP数据传输过程

先看一幅图


TCP/IP数据传输过程.png

这幅图可以分为两部分,左半部分和右半部分

左半部分是数据的发送过程,也是一个自上而下的过程。在应用层产生了一个“早上好”的数据后,将其交给传输层,这时TCP协议会增加一个TCP头部,此时数据变为“早上好+TCP头部”,并将其交给网络层,这时IP协议会加一个IP头部,此时数据变为“早上好+TCP头部+IP头部”,并将其交给数据链路层,此时以太网协议会增加一个以太网头部,此时数据变为“早上好+TCP头部+IP头部+以太网头部”,并将其交给物理层,物理层通过电缆线将数据传输出去

右半部分是数据的接收过程,它和发送过程完全相反,是一个自下而上的过程。在数据链路层解析数据中的“以太网头部”,如果是发给自己的包,则将以太网头部的其余部分上送给网络层,在网络层解析数据中的“IP头部”,如果是自己的数据,则将IP头部以外的数据上送给传输层,在传输层解析数据中的“TCP头部”,如果是自己的数据,则将TCP头部以外的数据,上送给应用层,而此时接收到数据恰好就是发送的数据“早上好”,至此,这个传输过程结束了。

当然,我也只是简单地描述了一下数据的传输过程,实际上的传输过程肯定要负复杂的多,比如网络层的寻址和路由选择就涉及到了很多细节,这就需要大家去看更专业的书籍了。

4. 部分协议解析

4.1 IP协议

先看一幅图

IP数据包.jpeg

下面详细分析下各部分的作用

  1. 版本。占4位,指IP协议的版本。目前广泛使用的是ipv4

  2. 首部长度。占4位,可以表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32字长(一个32位字长是4字节),因此,当IP首部长度为1111时(即十进制的15),首部长度就达到15乘以4=60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。最常用的首部长度是20字节(即是首部长度为0101),这样不使用任何选项。

  3. 总长度。占16位。总长度指首部和数据之和的长度,单位为字节。数据报的最大长度为2^16-1=65535字节。

  4. 标识。占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个标识不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同标识字段的值使分片后的各数据报片最后能正确重装为原来的数据报。

  5. 标志。占3位。目前只有两位有意义。
    标识字段中的最低标记为MF(More Fragment)。MF=1表示后面还有要分片的数据报。MF=0表示这已是若干数据报片中的最后一个。
    标志字段中间的一位记为DF(Don't Fragment),意思是不能分片。只有当DF=0时才允许分片

  6. 片位移。占13位。片位移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片位移以8个字节为偏移单位。即,每个分片的长度一定是8字节(64位)的整数倍。

  7. 生存时间。占8位。即TTL值

  8. 协议。占8位。指出数据报携带的数据是使用何种协议。

  9. 首部校验和。占16位。只校验数据报的首部,不包括数据部分。这是因为数据报没经过一个路由器,路由器都要重新计算一个首部校验和(一些字段,如生存时间,标志,片位移等都可能发送变化)。不检验数据部分可减少工作量。

  10. 源地址。占32位,发送端的IP地址。

  11. 目的地址。占32位,接收端的IP地址。

4.2 TCP协议

先看两幅图

TCP数据包.jpeg
TCP三次握手,四次挥手.jpg
4.3 UDP协议

先看一幅图

UDP数据包.jpeg
4.4 TCP/UDP对比
TCP UDP
面向有链接的通信服务 面向无连接的通信服务
提供可靠的通信传输 不可靠,会丢包
保证数据顺序 不保证
数据无边界 数据有边界
速度快 速度慢
面向字节流 面向报文
一对一 可以一对一,一对多
报头至少20字节 报头8字节
有流量控制,拥塞控制 没有

虽然TCP传输速度快(网络完美的状态),但由于各种机制,实际上的传输速度比UDP慢

  1. 为什么UDP比TCP快
    TCP需要三次握手
    TCP有拥塞控制,控制流量等机制

  2. 为什么TCP比UDP可靠
    TCP是面向有连接的,建立连接之后才发送数据;而UDP则不管对方存不存在都会发送数据。
    TCP有确认机制,接收端每收到一个正确包都会回应给发送端。超时或者数据包不完整的话发送端会重传。UDP没有。因此可能丢包。

  3. TCP无边界,UDP有边界

  • TCP无边界
    客户端分多次发送数据给服务器,若服务器的缓冲区够大,那么服务器端会在客户端发送完之后一次性接收过来,所以是无边界的;
  • UDP有边界
    客户端每发送一次,服务器端就会接收一次,也就是说发送多少次就会接收多少次,因此是有边界的。
  1. 什么时候用TCP,什么时候用UDP
    TCP:文件传输,发送邮件等对数据可靠性要求较高。
    UDP:语音,视频等对数据可靠性要求较低,但对效率要求较高的。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容