TCP/IP四层模型: 将OSI(open systems interconnection model)的七层模型合并为四层
- 网络接口层 : 负责数据的物理传输
- 互联网层 : 负责路由的选择,,使用的协议是IP (internet protocol)
- 传输层: 端到端的通信,,使用的协议是TCP,或者UDP
- 应用层: 负责处理具体的应用请求,,如HTTP,FTP,DNS等
传输层提供了一系列 socket api,,应用实在建立了有效的socket之后,在socket之上,收和发,,
tcp的socket建立:
- 建立一个welcome socket
- 调用
bind()方法,将welcome sokcet和本地的ip,端口绑定 - 绑定ip和端口,是为了监听客户端是否需要建立连接,,等待客户端建立连接
- 建立连接之后会产生一个
client socket用来数据交互
网络层提供的服务可能 丢失,乱序,延迟,出错,,传输层向上提供的服务可以是tcp可靠的服务,,tcp上面有ssl,可以加强他的安全性
tcp的传输:
- tcp协议会将要传输的数据分段(
segment),segment的头部会携带端口,,封装之后,交给下层网络层,网络层是主机到主机,,会在头部拼接上ip地址
UDP: user datagram protocol
- 进程到进程,,尽力而为,报文可能丢失,可能乱序,两个进程之间不需要握手,,常用于 实时流媒体,,或者是 一次往返搞定的应用(因为建立连接麻烦)
- udp不用握手,头部比较小(8个字节的头部),,,但是不可靠,,如果需要可靠的服务,,只能在应用层自己写
UDP传输数据校验:
- 发送方:
- 将数据(数据+头部+为头部) 按照16位分组,,进行二进制加法,,并执行
进位回滚,, - 这个进位回滚的值,,取反码,,,
- 将这个反码作为
校验和,,填入udp报头的校验和字段,然后发送整个数据包
- 将数据(数据+头部+为头部) 按照16位分组,,进行二进制加法,,并执行
- 接收方:
- 将收到的
所有内容(包括伪头部,udp头部,数据,以及发送方填好的校验和字段),按照16位分组,, - 将这些所有分组进行二进制加法,,(接收方会将所有字段加在一起,,并且加法的过程是
按反码加法进行的,,所以只需要加起来判断是否是全1就行),,,接收方的加法操作是反码加法,这意味这他在加法过程中会遵循反码加法规则,也就是说结果超出了16位,他会把高位丢掉,,加到低位 - 如果全1,表示数据传输无误,,如果不全1,,说明数据在传输过程中出现错误
- 将收到的
发送方和接收方使用的都是 反码加法 : 他们都会把高位丢掉,补到低位,,所以接收方直接求和,,如果是全1,,数据就是正确的
名词
-
welcome sokcet: 用于等待客户端的连接请求,负责监听和接收客户端连接 -
client socket: 与客户端建立连接之后的套接字,用于和客户端进行通讯,,与客户端进行数据交换 -
复用: 复用是 "发送数据" 的过程,,他将来自不同应用的数据汇集起来,,通过同一个网络接口(
网卡)发送出去 -
解复用: 解复用是 "接收数据" 的过程,,他将来自网络的一条物理链路上传输的混合数据包,,正确的分发到对应的 socket上,,因为在tcp协议上,,操作系统使用
源ip,源端口号,目标ip,目标端口这四个组成的四元组,,作为一个唯一的标识符,可以通过这个找到对应的进程,将数据发送给进程 -
进位回滚:

-
校验和: 一种简单的错误检测机制,,可以进行数据完整性检查,,但也可能出现巧合的错误
-
反码加法 : 是一种特殊的加法方式,他的特点是
进位回滚,将进位部分丢弃,并加回到低位