这篇是unix网络编程的学习笔记。编程
ip层协议,无链接,不可靠。因此必须依赖上层协议实现链接和可靠,好比tcp。网络
链接指创建链接,可靠指基于链接的通讯才是可靠的。好比,udp,就不须要创建链接,它只管发送数据,有没有收到无论,因此也说它不可靠,只要没有创建链接通讯,就是不可靠。**但是,不创建链接怎么通讯呢?**特别注意,这里说的不创建链接,不是真的不创建链接,而是创建的链接是一次性的,不是长期关系,长期链接,好比tcp是长期链接长期通讯,只要不主动close()就能够一直通讯。而udp不行,udp只管创建链接,发送数据,而后链接结束。udp建立链接也是建立socket,这个都是同样的,不一样的传输层协议包括tcp udp icmp都是经过建立套接字来实现的,只不过不一样的参数选项而已。socket
ip层只负责源地址和目的地址,还有数据。ip路由协议的主要目的是路由数据。tcp
可靠性包括几点
1.无差错
2.按顺序
3.不重复学习
最重要的字段
1.数据
2.源地址
3.目标地址操作系统
重点关注前面三个字段。3d
4.数据的大小
就是整个报文的数据大小。知道大小,读数据的时候就知道何时结束。unix
5.惟一标识符
惟一标识该数据报文。由于可能重复,因此写读的时候根据这个要去重。cdn
6.协议
最多见的是tcp仍是udp。
还有icmp(internet control message protocol网络控制消息协议),好比ping telnet traceroute等,使用的就是icmp协议。blog
知道了咱们须要哪几个核心字段,再来看ip协议的细节是怎么包含这几个核心字段的。ip数据报文,包括两部分:
1.头
2.数据
头就是和http请求头/响应头同样,属于协议的格式部分,有了这些字段,才能识别是什么协议。
头字段的图
对头字段的图的说明,总共包括两部分:
1.固定字段
2.选项字段
固定字段总共占20个字节,上图的每一行是32位(即占4个字节),总共5行,因此总共恰好是20个字节。
选项长度不固定,最大值是40个字节。由于固定字段里有个长度字段限制了头的总长度。
固然,还有一部分,就是数据自己,这个不提略过。
是传输层协议,和tcp udp同层级。
报文格式
做用
用于肯定两台机器是否能够通讯,若是不能通讯,是由于哪些缘由。
报错信息如图
imcp协议如何通讯?
也是套接字,不过是原始套接字,你就记住是两套机制,虽然都是套接字。可是,使用的时候差很少,建立原始套接字的时候,只是参数不一样,有个字段标识这是原始套接字。
原始套接字用于ping程序,不须要端口,至关因而两台机器操做系统之间的通讯,而不是某个具体的程序,因此不须要端口。
unix网络编程