这一部分是计算机理论基础和网络基础。基础的进制转换和原码补码已经比较清楚了。

网络部分的七层以及相关内容没有仔细看过。程序员的四大浪漫(编译原理,操作系统,计算机图形学,计算机网络)每一个都不简单。这部分的讲义在这里.

  1. 应用层
  2. 表示层
  3. 会话层
  4. 传输层
  5. 网络层
  6. 数据链路层
  7. 物理层

物理层
用来发送电信号

数据链路层
用来分组电信号,后来形成了以太网协议。
以太网协议:
一组电信号构成一个数据包,叫做帧
每一数据帧分成:报头Head 和 数据 Data
报头固定18个字节,包含发信地址,目标地址,数据类型。 数据包含:最短46字节,最长1500字节。(似乎是MTU)数据包里就是数据的具体内容。
Head+Data 最短64字节,最长1518字节,超过就分片发送。
发信和目标地址用Mac地址进行标记。Mac地址为48位的2进制。通常由12位16进制数表示。
发包的时候在局域网内部通过广播的方式,收到包的机器会检查目标地址,如果不是自己则丢掉。但是如果跨局域网通信,采用广播的方式,则数据压力太大,数据链路层无法解决这个问题。

网络层
网络层定义了IP协议,IPv4指定网络地址由32位2进制表示,范围0.0.0.0-255.255.255.255,通常写成四段十进制数。
IP地址分成两部分:标识子网和标识主机。然后还有子网掩码,用来判断两个IP地址是否在同一个子网络内。
IP数据包也分为Head 和Data。Head部分记录来源Ip和目标Ip,data内为数据。IP的整个包实际上要被封到以太网包的数据部分,由物理层传输。
在传输的时候如何预先知道别人的Mac地址呢,是采用ARP协议的方式,将自身的Mac地址广播到局域网内。广播地址就是FF:FF:FF:FF:FF:FF,这表示需要获得对应IP地址的Mac,机器在收到之后发回mac地址,就知道了这个局域网里所有机器的Mac地址。

传输层
传输层这一层解决的是找到计算机之后,如何知道数据包交给哪个程序。传输层通过TCP和UDP协议,建立端口到端口的通信。
端口是一个虚拟概念,从0-65535,其中0-1023是系统占用端口。
TCP协议:可靠传输,按照以太网头 IP头 TCP头 数据的方式组织传输,TCP包的数据可以无限长,但一般不超过IP包的长度,避免浪费时间分割。
UDP协议,不可靠传输,报头一共只有8个字节。总长度不超过65535。
TCP会在端口之间进行握手来建立稳定传输,由于TCP和UDP的协议很复杂,所以抽象出了一个Socket(套接字)用于封装TCP和UDP,在之后的python编程中,就面向Socket编程,不用深入底层的协议。

应用层
就是应用程序在传输数据之上对于数据格式的进一步协议.比如电子邮件应该以什么样的格式发送,接收软件也采用相同的格式,就能够再将电子邮件正常显示出来.
大部分网络传输都有标准格式,比如HTTP,FTP,电子邮件等,在开发程序的时候要熟悉对应的标准格式.如果是非标准格式,则自己的软件需要完成将数据封装和解包读取的功能.

学完感觉计算机网络不愧四大浪漫之一,绝对不简单,随便一本TCP协议入门的书都大概两块砖头厚.不过目前只需要了解网络的基本结构.
记得自己有一本图解HTTP,还需要再翻一翻了.