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 ...
随机推荐
- 10个最佳 Javascript+HTML5 演示文稿框架
JavaScript 与 HTML5 框架在创建基于现代浏览器的演示文稿时发挥了重要作用.他们把展示插入网页,为演示信息提供了一个有效方式.一般来说,手工插入花费大量事件和精力,它很复杂,以至于新手们 ...
- [简记] fetch API 的初步使用
var myHeaders = new Headers(); myHeaders.append('Content-Type', 'application/x-www-form-urlencoded; ...
- React Native中Mobx的使用
从今天开始我们来搞搞状态管理可否,这几天没怎么写博客,因为被病魔战胜了,tmd,突然的降温让我不知所措,大家最近注意安全,毕竟年底了,查的严,呸,大家注意保暖 特别声明:写该文只是写一下用MobX的思 ...
- Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试
脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试 by:授客 QQ:1033553122 目的 实现基于http协议的流媒体在线视频播放,服务器性能测试脚本,模拟用户浏览器方式在线播放 ...
- Jni 线程JNIEnv,JavaVM,JNI_OnLoad(GetEnv返回NULL?FindClass返回NULL?)
此文章是关于NDK线程的第二篇理论知识笔记.主要有两个点,如下: 1.pthread_create(Too many arguements, expected 1) ?2.线程中如何获取JNIEnv? ...
- Android 获取网络类型
获取网络类型 public class IntenetUtil { //没有网络连接 public static final int NETWORN_NONE = 0; //wifi连接 public ...
- Java虚拟机(一)结构原理与运行时数据区域
我们来学习Java虚拟机的结构原理与运行时数据区域. 1.Java虚拟机概述 Oracle官方定义的Java技术体系主要包括以下几个部分: Java程序设计语言 各种平台的Java虚拟机 Class文 ...
- synchronized的锁问题
有一个类A,提供了三个方法.分别是静态同步方法,非静态同步方法,含有静态代码块的方法 1 class A{ 2 public static synchronized void print1(){ 3 ...
- matlab练习程序(Levenberg-Marquardt法最优化)
上一篇博客中介绍的高斯牛顿算法可能会有J'*J为奇异矩阵的情况,这时高斯牛顿法稳定性较差,可能导致算法不收敛.比如当系数都为7或更大的时候,算法无法给出正确的结果. Levenberg-Marquar ...
- python第五十九天-----补上笔记
rabbitmq_server_topic topic模式 #!/usr/bin/env python #{data} {time} #_*_coding:utf-8_*_ import pik ...