[TOC]
TCP和UDP的区别
TCP-传输控制协议,提供面向连接的,可靠的字节流服务。先建立连接再传输,提供超时重传,滑动窗口,确认,流量控制,用塞避免,序列号等机制保障可靠传输。 UDP-用户数据报协议,面向数据报的传输协议,提供的是不可靠的传输。不需要建立连接,传输速度快。可以靠应用层协议实现可靠传输如RUDP,RTP等。
ICMP和IP协议
ICMP-Internet控制报文协议,是面向无连接的,用于IP主机与路由器之间控制传递消息,属于网络层,可用于确认IP包是否到达目的地。
IP-网际协议,负责网络上的通信,并规定了数据从一个网络传输到另一个网络的规则,提供不可靠的,无连接的数据包传送
TCP 3次握手/4次挥手
3次握手
client请求同步SYNC
server收到请求,返回ACK+SYN确认
client发送确认
4次挥手
client发送FIN
server收到请求,返回确认
server发送FIN
client收到,返回确认
4次挥手是因为全双工通信,每条通路单独关闭。 client收到FIN后,除了返回确认,还需要经历TIME_WAIT(通常为2MSL)是为了防止丢包最后的ACK以及让网络中的重复分节消失。
网络编程步骤
Server端
1 创建socket,绑定端口 2 TCP需要listen监听端口,并通过accept接收请求,udp不需要(连接在listen时建立,accept返回的是已经建立的连接的套接字) 3 TCP send/recv,UDP sendto/recvfromclient 4 close
Client端
1 创建socket 2 TCP需要connect,udp不需要 3 TCP send/recv,UDP sendto/recvfromclient 4 close
网络模型与常见协议
OSI七层模型
物理层:传输比特流(通过物理介质),与机械电气有关,RJ45
数据链路层:将比特流组装为帧结构,进行同一网络内的传输,例如MAC,PPP,VLAN,HDLC
网络层:实现不同网络的互通,IP,ICMP
传输层:提供端到端的报文传递,TCP,UDP
会话层:建立,管理和终止会话,NFS
表示层:对数据进行翻译,加密,压缩等操作,JPEG
应用层:HTTP,FTP,DNS等
TCP/IP四层模型
网络接口层:MAC,VLAN
网络层:IP,ICMP
传输层:TCP,UDP
应用层:HTTP,FTP,DNS等
http相关
HyperText Transfer Protocol 超文本传输协议 ,一种位于应用层的数据传输协议,建立在tcp上 http状态码
1xx 属于提升信息,是协议处理中的中间状态,实际应用较少 2xx 服务器成功处理了客户端请求 200 成功 204 成功(无内容) 206 Partial content 应用于分块下载 3xx 重定向 请求的资源发生了变化,会使用Location字段表示下一跳的url 301 永久重定向 302 暂时重定向 304 Not Modified 重定向至浏览器缓存文件 4xx 客户端报文有误,服务器无法处理 400 Bad Request 403 Forbidden 服务器禁止访问资源 404 Not Found 资源不存在 5xx 客户端请求正确,服务器内部处理错误 500 Internal Server Error 笼统的错误码 501 Not Implemented 请求尚不支持 502 Bad Gateway 服务器作为代理访问后端server时异常 503 Service Unavailable 服务器正忙
http头中的常见字段
host 指定服务器域名 content-length 数据长度 content-type 数据格式 content-encoding 数据压缩方法 accept 可接受的格式 accept-encoding 可接受的压缩方法 例如gzip expires 缓存过期时间 cache-control 同样是控制缓存 last modified / if modified since 与缓存控制相关
http中的安全和幂等
http中的安全是指请求方法不会破坏服务器上的资源,因此GET方法是安全的,DELETE是不安全的
幂等是指多次执行相同的操作,结果(造成的影响)相同。例如通过POST新增资源,多次调用,资源被创建多次,因此不是幂等的
http的优缺点
优点:简单灵活,易扩展,跨平台。报文格式header+body,header是key-value的形式,易于理解。且作为应用层协议,下层可以进行变化处理(例如https,http2.0等) 缺点:无状态协议(好坏参半,在需要知道状态时需要通过session,cookie等方式辅助),明文传输不安全(可通过https实现安全传输)
http的发展历程1.0~3.0
1 http1.0的每次请求都需要重新新建TCP连接,网络开销大 2 http1.1使用长连接(keep-alive)的方式,减少TCP连接的重复建立。因此使得管道传输成为可能,客户端可以连续发送请求,不必等回复到达。可能导致队头阻塞,即某个请求迟迟无法回应,因此影响到之后所有请求的回应。 3 http2.0是基于https,包含以下的几个新特点优点:头部压缩,同时发送多个请求时,若header是相似的,会消除重复部分减少开销,HPack算法。二进制格式,全面采用二进制格式,头信息,数据体都是二进制,变成头信息帧,数据帧,因此收到报文后无需转换直接解析。数据流传输,一个请求或者回应的所有数据包称为一个数据流,每个流都有独一无二的编号,client发出的为奇数,server发出的为偶数。优先级,client可以指定数据流的优先级,优先级高的server优先响应。多路复用,不用排队等待。服务端push,可以在client请求html时,主动将css,js等静态资源发送给client,减少等待。 4 http3.0是使用基于udp的QUIC协议,实现类似tcp的可靠传输。某个流丢包时,只阻塞这个流,其他流不受影响。把TCP与TLS的六次交互合并成3次,目前大部分网络设备不支持。