TCP/IP协议---IP协议
IP协议层 在传输层的下边,链路层的上边。
IP层封装后称为数据报(传输层叫数据段,链路层叫数据帧。值得注意的是,不是所有的以太网数据帧都是IP数据报,至少以太网还要使用ARP协议。不是所有的IP数据报都是UDP或TCP数据,因为比如ICMP、IGMP也用IP传送数据)。
IP协议在网络中当然非常重要了,所有的TCP、UDP、ICMP、IGMP数据都以IP数据报格式传输。
IP协议提供一种不可靠、无连接的服务。网络中的可靠性是交给上层的传输层负责,比如TCP协议。IP实际也提供了尽可能的服务,尽力发送了哈哈。无连接意思是,不维护一个后续数据报的状态(比如TCP交换数据前的三次握手,靠一对IP和端口维护连接),IP每个数据报都是独立的。比如说两个数据报从源端发送到目的端,先发的A,后发的B,但是他俩谁先到目的端都不一定,走的路由线路也可能不一样。
IP首部。每个协议的首部还是很重要和关键的,理解首部各个字段的意思很有必要...
IP数据报的格式如下:

一般数据报的头部占有20个字节,如果有选项数据(比如IP记录路由选项,记录时间戳都是放在这个字段里)就要再加上选项数据的字节长度。除了头部就是数据区了(显然如果从传输层过来的,那么这个数据区就会包含传输层的头部和他的数据)。
按照首部的网络字节序介绍下:
4bit 版本: 版本号,v4还有很多,路由也已经支持了v6。
4bit 首部长度: 首部长度指的是首部占32bit字的数目,包括首部选项。4bit最大(全为1)能表示15。那么15*32bit,表示最大首部长度为60个字节。
8bit 服务类型(TOS): 一些应用程序的类型,比如telnet、ftp、tftp smtp icmp等等。不同的程序有不同的TOS参数:比如最小时延、最大吞吐量 、最高可靠性、最小费用等。类如telnet这种程序,就要求交互性高一些(最小时延),ftp需要吞吐量大一些。(注:一般实现都不设置TOS这个字段,这些类型需要其他东西判断,比如根据端口号来区分是什么服务...)
16bit 总长度(字节数): 和首部长度以32bit为单位不同,这个是以8bit一个字节为单位。总长度是包括ip头部和数据部分。显然16bit的最大长度是65535。但是一般不会这么大,ip层数据报到了链路层,链路层会给数据报分片,不然太大了...分片时,这个总长度就是各个分片的总长度了。总长度是必须要设置的,因为链路层的数据帧(帧的数据部分就是这个ip数据报)有最小长度要求,如果不够需要补长,补长的话就需要在帧尾了,帧尾就污染到数据报了,所以如果有这个必要的ip数据报总长度,就能区分哪些是补长,哪些是数据报的数据哈哈。
16bit 标识: 唯一标识主机发送的每一个数据报。被分片以后,分片的每个分组中的标识是一样的。
3bit 标志: 3bit分为保留位,不分片位,更多片位。不分片位是1的时候不分片,0为分片。更多片位在分片中除了最后一个分组为0,其它分片都置为1,表示告诉接收端啥时候把这些分片完成组装的标志。
13bit 片位移: 用于数据报被分片时,记录这个大的数据报被分片了,距离该大数据报第0字节偏移了多少字节。类似于sql中的offset哈哈
8bit 生存时间TTL: 这个字段很有意思,比如ICMP协议中ping、tracerout命令都利用了这个TTL。一般来说,就是网络传输中,跨一个路由,TTL就减1。给他一个生存时间,避免一个包在路由中循环往复一直这么传播。到1或者0这个包就废废了,然后这个路由发回去一个ICMP包告诉源端主机情况。
8bit 协议: 表示上层协议是那种类型,是TCP、UDP、ICMP、IGMP等,识别那个协议向IP传送数据。
16bit 首部检验和: 首部(ip只计算首部的)检验和。发送数据报的时候,1).先把这个16bit全置为0;2).把头部中每个16bit进行相加; 3). 得到的结果取其反码。这个反码就放在16bit的检验和中。接收端接收时,执行上述的2,3步骤,如果值为16bit的1,表示传输正确。这也看出来IP协议也是尽可能的传输了哈哈。
32bit 源端ip地址: 发送端的ip地址。
32bit 目的端ip地址: 接收端的ip地址。
首部选项: 可以存储记录下通过的路由ip、通过的时间戳等信息。显然记录的长度有限。当今这么庞大的互联网,用的也比较局限。
========IP首部============
五类互联网地址和IP范围: 可以看到A类网址容纳主机数量最多,A类网址也比较少基本都分配完了。


IP路由选址:
如果是以太网的一个网段里,那么没必要跨路由器,根据mac地址找到目的端完成传送。
如果跨路由传输,那么就有一个路由传输的算法了,通常如下:
1). 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口。
2). 搜索路由表,寻找能与目的网络号相匹配(要用到子网掩码)的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口。
3). 搜索路由表,寻找标为“默认”的表目。如果找到,则把报文发送给该表目 指定的下一站路由器.
三个都没有,那么路由就给它抛弃了,并返回源端一个错误。
以太网中跨路由传输时,值得注意的是。数据帧的首部中目的地址,目的MAC地址,在每个链路里可能是变的,它一般总是指向下一个链路的MAC地址,比如网关路由的MAC地址;而ip首部中的目的地址,目的ip一般是不会变的。经过的路由通常都是根据这个目的ip进行路由的。
子网寻址:
一般来说,一个ip地址由网络号和主机号组成。但是一个网络号如A类、B类地址下边可以容纳太多的主机(B类也有16bit主机了),一般又不会这么多,就给主机号再分配了,分成子网号和主机号。
拿分配B类地址举例,有16bit的主机号,一般就是8bit的子网号,8bit的主机号。这样一个B类网络号,下边可以有254个子网,每个子网下又可以有254个主机(全0全1)。
子网掩码:
掩码是一个比特掩码。当然和ip一样也是32位,为1的是网络号+子网号,0的对应主机号。如果知道地址,那么就知道它是否为A类、B类或C类地址(从IP地址的高位可以得知),也就知道网络号和子网号之间的分 界线。而根据子网掩码就可知道子网号与主机号之间的分界线。
值得注意的是,如果子网号和主机号并非都是8bit的话,比如子网号占了10bit,那么主机号就是6bit了,这种变长子网。这样用点分十进制表示网络号+子网号的时候,最后一个点后边当然就不是0了~
-
TCP/IP协议---IP协议的更多相关文章
- http与https与socket tcp/IP与UDP 协议等
网络由下往上分为: 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- ...
- TCP/IP 和HTTP 协议基础知识
来源:http://www.myhack58.com/Article/60/63/2014/50072.htm 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过 ...
- TCP/IP和HTTP协议代理
TCP/IP协议族 TCP/IP(传输控制协议/网际协议)是用于计算机通信的一个协议族. TCP/IP协议族包括诸如Internet协议(IP).地址解析协议(ARP).互联网控制信息协议(ICMP) ...
- TCP/IP 笔记 - 地址解析协议
地址解析协议(ARP)提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射.ARP仅用于IPv4,IPv6使用邻居发现协议,它被合并入ICMPv6.地址解析是发现两个地址之间的映射关系的过程 ...
- 在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统? 网络层协议 MAC帧、IP数据报、TCP报文 关系 IP地址与硬件地址 链路层与网络层
小结: 1. 网络层两种服务 虚电路服务 virtual circuit 电信网 网络层负责可靠交付 数据报服务 网络层不负责可靠交付 提供灵活的.无连接的.尽最大努力交付的数据报服务 不提供服务 ...
- http协议tcp协议ip协议三次握手四次挥手,为什么三次握手,为什么四次挥手,sockete套接字理解
1.1 TCP是什么? TCP是Tranfer Control Protocol的简称,TCP协议是一种面向连接的.可靠的.基于字节流的运输层通信协议.通过TCP协议传输,得到的是一个顺序的无差错的数 ...
- 【TCP/IP详解 卷一:协议】第十七章 TCP:传输控制协议
本章作为TCP的入门章节,简单的概述了一些TCP的知识,和TCP数据报的首部格式. TCP 最重要的特性:reliable. 17.1 引言 本章介绍的是 TCP为应用层提供的服务. 17.2 TCP ...
- tcp/ip (网络通讯协议)
介绍 TCP: 传输控制协议, IP: 网际协议, TCP/IP: 供已连接互联网的计算机之间进行通信的通信协议 在tcp/ip内部 , 包含一系列处理数据通信的协议: tcp.udp.icmp.dh ...
- 浏览器解析,HTTP/HTTPS、TCP/IP、WebSocket协议
浏览器相关 浏览器对同一个域名有连接数限制,大部分是 6. 浏览器指的是 Chrome.Firefox,而浏览器内核则是 Blink.Gecko,浏览器内核只负责渲染,GUI 及网络连接等跨平台工作则 ...
- TCP/IP及http协议 SOAP REST
TCP/IP及http协议: TCP/IP协议主要解决数据如何在网络中传输, 而HTTP是应用层协议,主要解决如何包装数据 SOAP:简单对象访问协议(Simple Object Access Pro ...
随机推荐
- web全栈架构师[笔记] — 03 html5新特性
HTML5新特性 一.geolocation PC端 精度比较低 通过IP库定位 移动端 通过GPS window.navigator.geolocation 单次 getCurrentPositio ...
- 双网卡设置(转:https://www.cnblogs.com/visionfeng/p/5825078.html)
双网卡一般情况不能有两个网关 特别是别设内网网关,这样有段时间过后会出现访问不了外网情况 支持两个网关的方法倒是有 让双网卡一台电脑拥有两个网关(转) 首先要声明一点,双网卡一台电脑拥有两个网关是不可 ...
- JavaScript大杂烩14 - 使用JQuery(上)
JQuery意义 - Why? 为什么要使用JQuery,从我个人来说,就是这么几点:简化代码 + 统一行为 + 功能强大 + 搭配方便. 简化代码是从写代码的角度来说的,实现同样的功能,如果用Jav ...
- C#获取H5页面上传图片代码
基于上一篇的H5压缩上传图片,由于图片是以二进制字符流blob的形式传过来的,所以应该想将其转成bytes类型再进行转换 public void ProcessRequest(HttpContext ...
- log4net写入日志到sqlserver数据库
1.添加log4Net配置文件log4net.config 配置文件属性设置为: 配置如下: <?xml version="1.0" encoding="utf-8 ...
- java调用python的惨痛史(无法获取环境变量)
环境:java,was,python2.6,红帽linux,oracle,python用cx_Oracle 事情是这样的,有个需求,需要对数据库进行处理,简单说就是把数据取出来,用pyt ...
- 1. svg学习笔记-在网页中使用svg
在网页中使用svg有以下三种方式 1. svg归根结底来说是一种图像格式,虽然有别于jpeg,gif,png等位图图像格式,所以在网页中能嵌入图像的地方都可以嵌入svg,例如将svg文件设置为< ...
- U盘内容被病毒隐藏的解决办法(亲测可用)
前几天用U盘的时候不小心感染上了病毒,用自己的电脑打开后里面只剩下一个U盘的快捷方式,选中显示隐藏文件之后依然没有任何显示,但是查看U盘的属性的时候可以看到,U盘已经使用了300多M,所以就上网查了一 ...
- (一)helloworld
欢迎来到windows编程的世界,先给我们的windows打个招呼吧: #include <Windows.h> #include <iostream> using names ...
- cmd 命令
cmd 在桌面或任意磁盘新建一个TXT--输入CMD并保存--修改扩展名为.BAT md 文件夹名 新建文件夹cd 文件夹名 进入到该目录cd.. 返回上一层目录cd\ 返回根目录cd.>文件名 ...