网络协议简介
这几天重温了一下网络协议,感觉有必要记录一下。首先就是对于现在而言,网络分为7层,第一层为物理层,往后依次是链路层,网络层,传输层,会话层,表示层,应用层,而一般情况下可以把会话层,表示层,应用层整体看作一个应用层,最为经典的案例就是ip协议在网络层,tcp在传输层,http在应用层。
首先物理层是最底层的,就是负责传输信号,再往上一层的数据链路层拿到的就是01字串了,数据链路层负责侦测发送冲突,和辨认不同的数据帧的。一般我们通过抓包比如用wireshark之类的,或者用raw socket的进行编程时拿到的就是数据帧了。然后先来说一下数据帧的格式了。数据帧包括三部分数据头,数据,数据尾,数据头是14字节,包括6字节目的地址mac,6字节源地址mac和两字节的协议类型,一般是0x0080表示是ip协议,最后数据尾是4字节的crc校验。一般我们熟知的arp协议,ppp协议还有l2tp协议都是工作在数据链路层的。
然后就到了网络层了,网络层我们熟知的就是ip协议,有了ip协议之后数据包能够知道如何将数据包转发到合适的位置上。现在ip协议分为ipv4和ipv6,其中ipv4是说ip地址是32位的,一般表示为0.0.0.0-255.255.255.255,ipv6的地址是128位的通,常写作8组,每组为四个十六进制数的形式,如FE80:0000:0000:0000:AAAA:0000:00C2:0002。
先来看ipv4的协议包header结构。
-|------------->16<--------------|------------->16<--------------| -|0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7| -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | vesion| IHL | TypeOfService | TotleLength | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | identification |flags| FragmentOffset | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
首先最开始的4bit,表示协议类型,因为是ipv4所以是4,之后的IHT是ip header的长度,一般情况下是5,是说header的大小是5*4=20字节,也就是说header最大长度是15*4=60字节,注意IHT最小就是5,因为没有额外信息时所有信息至少需要20字节存储。具体的协议内容可以查看rfc791。
再来看ipv6的数据包header格式。
-|------------->16<--------------|------------->16<--------------| -|0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7| -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| Traffic Class | Flow Label | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Length | Next Header | Hop Limit | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | -+ + | | -+ Source Address + | | -+ + | | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | -+ + | | -+ Destination Address + | | -+ + | | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
可以看到ipv6的header协议简化了一些内容,而地址边更为128bit,也就是16字节了。具体可以查看rfc2460。
在网络层工作的协议有ip,icmp,IPsec,ping是用的icmp协议就是工作在网络层的。
去掉了ip数据头之后就到了传输层了。传输层我们比较熟悉的就是tcp协议和udp协议了,这两个都是传输协议,而且一般情况下tcp和udp都有成熟的socket接口一般不需要自己去解析数据包格式了,所以这里不在赘述了,比如SOCK_STREAM是基于TCP的,SOCK_DGRAM是基于UDP的。TCP是数据保障的传输协议,而UDP则不保证数据传输的可靠。
然后最后就是应用层的数据协议了,这一层的协议就开始丰富起来了,比如http,ftp,dhcp,dns等。
最近还看到一个比较常用但是一直没有注意的socks5协议,详细内容可以看rfc1928,socks5也是应用层的协议,相对于我们说的五层网络而言,而对于7层网络而言,他是工作在会话层的,而这个协议也基本是作为proxy的存在,在去除掉传输层的协议就是tcp或udp的协议之后就能看到scocks5的协议内容,再往下会有http,ftp等协议,所以作为proxy而言,socks5协议不但比较简洁,而且对于更上层的协议如http,ftp等能更方便的转发。
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:isnowfy 来源: isnowfy
- 标签: 网络协议
- 发布时间:2012-12-24 22:47:37
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则