tcp-ip详解笔记

趁着linux内核看得差不多了,想着把网络部分拿来看看,从1.0版本后就开始支持网络了,但看了下发现很多概念不清晰,决定找出tcp-ip学习学习,为内核网络部分做做准备。这些仅仅是个人理解,有误请谅解

1.0数据链路层

协议服务对象

链路层的上层是ip层,ip层有三个协议(IP,ARP,RARP),链路层的目的就是为上层协议发送和接收提供支持,链路层支持多个协议,包括

  • 以太网链路层协议
  • IEEE 802对以太网进行封装后的协议
  • SLIP和PPP两个串行接口协议

我个人理解应该是以太网或者 IEEE802是面向路由器到网局部分的,而路由器到我们终端使用的是串行协议

以太网和IEEE802:

image.png

SLIP
用END(0xc0)作为开头和结束,如果IP报文中有END则连续传输0xdb和0xdc来取代它防止被当做结束标志,如果IP报文中有0xdb则连续传输0xdb和0xdd来取代它。
个人理解:SLIP很简单,只用END标记报文的开头和结束,没有协议字段导致它只能支持ip协议,不支持ARP和RARP别的协议,导致使用SLIP的终端必须知道对方的IP才可以通讯。

CSLIP
就是SLIP的压缩版,我们知道就算直接应用报文只有1个字节,但打包成IP协议后也包含IP的20字节的头和TCP20字节的头,这样就有40个字节是协议头,而实际传输的内容只要一个字节,为了避免这种情况,CSLIP对SLIP进行压缩

PPP协议
书中是说PPP解决了SLIP所有的缺陷,但也就是通过增加协议控制位实现的,它对比SLIP新增了控制位,协议位,和CRC校验位,这样它就可以多种协议,支持LCP(链路控制协议)和NCP(网络控制协议),这样就可以在双方之间确定更多的上下文细节。

image.png

环回接口

个人理解就是链路层传输过程中一旦检测到IP地址是A类地址,就知道是局域网,就不会发到网络中,而是直接返回到本地网络中。

最大传输单元MTU

也就是不同协议对实际容纳的IP报文大小是有限制的,下图标识了各协议的限制大小


image.png

2.0IP协议

IP协议是tcp/ip协议中最核心也是最基础的协议,它是tcp和udp的下层协议,ip协议提供了不可靠,无连接的数据报传送服务。它的不可靠包括不保证数据的到达,比如在某个路由器中,当缓冲区用光之后,新的ip报文会被丢弃掉,然后路由器会向信源发送一个ICMP消息。IP报文的头部有20个字节,如下图


image.png

大端法

tcp/ip协议明确了再网络中是以大端传送,即先发送07bit,然后815这样。

版本号

比如4就是ipv4,6就是ipv6

首部长度

普通ip数据报是5,代表头部有5个32bit

服务类型

包括3bit的优先权,4bit的TOS子字段和1bit未用但必须是0
4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小费用,使用的是位图,并且只能设置一位,如果4bit都是0则代表一般服务,下面是一般程序的推荐值,如FTP控制报文需要最小时延,数据则需要最大吞吐量


image.png

总长度字段

是ip头部必要的内容,这样ip层才知道收到的ip长度,因为下层协议如以太网会填充一些数据达到最小长度

标识字段

唯一标识主机发送的每一份数据报,这里可以把它理解成ID号,一般每发送一个报文就会加1

3位标志和13位片偏移

后面补充

TTL

代表报文最多可以经过多少路由器,初始值一般是32或64,每经过一个路由器就-1,当值为0时路由器就丢弃该报文

8位协议

IP层上层有TCP,UDP,ICMP,IGMP等协议,该字段标识协议类型

16位首部校验和

该校验只对IP报文的首部生成校验码,并不包含数据,上层协议中的校验码会去包含数据。计算方式是对首部每16bit进行二进制反码求和,这样接收方就能校验数据是否在传输过程中是否有差错。ICMP,IGMP,UDP,TCP也都采用相同的校验和算法,还有就是路由器才传送IP报文的时候会修改TTL,但路由器只是对TTL做减一,所以路由器也仅仅需要让校验和做加法,而不需要重新计算整个校验和

最后一个选项

如果需要额外补充ip头,首先需要增加4位首部长度的值,并且要求是32bit的整数倍,所以选项中数据不够需要填充0。


image.png

路由

如果IP层被设置成了路由器的功能,就要对收到的数据报进行转发,路由器中维护了一组路由表,每个表项包含下面这些信息

  • 目的IP地址,可以是完整主机地址也可以是网络地址
  • 下一跳的路由器的ip地址
  • 标志,其中标识目的地址IP地址是网络地址还是主机地址,另外一个标志指明下一跳路由器是真的路由器还是一个直接相连的接口
  • 指定的网络接口

IP路由选择主要是搜索路由表,如果能找到目的IP地址完全匹配的表目,则发往该表目的下一跳路由器,如果没找到则寻找与目的网络号相匹配的表目。都没有找到则寻找路由表中默认的表目,如果都没有成功,一般就会向发送主机发送一个主机不可达或网络不可达的错误

IP的路由的原则是为一个网络制定一个路由器,而不是为主机制定一个路由器,这样做可以大大减少路由表的条目

网络号

前面说过了,路由器的路由表记录的是网络地址而不是主机地址,那比如一个B类地址,前16bit就是网络号,而当把一个网络号分给某个系统后,该系统的管理员可以自己分配子网,比如下图中,就是用8位作为子网号,那么也就是可以容纳254(因为要减去全0和全1的地址)个子网,每个子网可以容纳254台主机。


image.png

ipv4各类地址

image.png

子网掩码

主机需要知道子网的划分,子网掩码的作用就是让主机知道哪些是网络号,哪些是主机号,也就是把子网掩码写成二进制,1代表网络号部分呢,0则代表主机号部分。

特殊的IP地址

image.png

以太网地址和IP地址映射

image.png

ARP请求

简单来说,ARP请求过程就是上层应用都是通过ip来通信的,但到物理层,网卡驱动程序只认识48位的mac地址,这时候主机只有对方的ip地址而没有mac地址,就会在局域网广播一条ARP请求,ARP请求中包含了自己的ip地址和mac地址,这样当这条ip地址的主机收到这条ARP请求的时候,就会用请求中的主机的mac地址回复一条ARP请求。


image.png

ICMP

ICMP是在IP层上的协议,一般为TCP,UDP使用


image.png

image.png

image.png

Ping程序

Ping程序就是基于ICMP协议,来测试网络是否可达,但现在随着互联网的安全加强,出现了访问控制清单的路由器和防火墙,也就是说不能Ping通并不代表TCP层不通


image.png

简单路由表

netstat -rn可以列出本机的路由表


image.png

image.png

动态路由RIP

RIP是包含在UDP中的,常用的端口号是520


image.png

image.png

UDP协议

首部:
image.png

DNS

报文格式:


image.png

image.png

TCP

image.png

新建立连接的时候,SYN标志置1
接收方返回的确认序号是发送期望的序号+1,并且ACK标志置1
U R G 紧急指针(u rgent pointer)有效(见2 0 . 8节)。
A C K 确认序号有效。
P S H 接收方应该尽快将这个报文段交给应用层。
R S T 重建连接。
S Y N 同步序号用来发起一个连接。这个标志和下一个标志将在第 1 8章介绍。
F I N 发端完成发送任务。

连接三次握手:

  1. 请求方发送SYN,发送生成ISN
  2. 接收方收到后回发一个报文,ack打开,确认ISN为收到的ISN+1,并且该包还包含一个SYN请求,同样包含接收方的ISN
  3. 请求方接收到接收方的报文后,再回复一个ack

简单点说就是打电话,

  • A跟B说,我是A,听得到吗
  • B听到后,回复我听得到啊,那你听得到我说话吗
  • A说我也听得到

之所以3次,是因为B收到后返回的报文既有确认信息也有自己的同步消息

理解了同步3次,结束4次也不难理解了,结束的时候

  • A跟B说,我的话说完了,可以挂了
  • B说收到,但稍等下,我还有点话没说完
  • B终于说完了后,说,我也说完了,挂吧
  • A说收到,挂了
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 9.1 引言 选路是IP最重要的功能之一。图9-1是IP层处理过程的简单流程。需要进行选路的数据报可以由本地主机产...
    张芳涛阅读 1,184评论 0 2
  • TCP/IP 协议族 Transmission Control Protocol/Internet Protoco...
    槑小姐_1419阅读 904评论 0 1
  • 3.1 引言 IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报...
    张芳涛阅读 825评论 0 3
  • 网络层提供的两种服务 在计算机网络领域,网络层应该向运输层提供怎样的服务(面向连接还是无连接)曾引起了长期的争论,...
    srtianxia阅读 3,926评论 0 12