互联网通信(后期自己对内容进行完善)
1.分层(主要是为了解耦)
exec 9<> /dev/tcp/www.baidu.com/80
#9表示文件描述符
#<>:表示输入输出流
#exec
#/dev/tcp/www.baidu.com/80 在linux表示文件,linux一切皆文件(摄像头、显示器的等)
echo -e "GET / HTTP/1.0\n" 1>& 9
## 1>& 指令表示输出指向一个文件描述符
cat 0<& 9
传输控制层(UDP、TCP)
TCP面向连接的、可靠的传输协议(三次握手)
1.客户端发送SYN给服务器请求连接,其中约定数据包大小
2.服务器给客户端发送syn+ack(该ack=客户端seq+1)
3.客户端发送ack给服务器进行确认
当传输层建立连接后双方的操作系统开辟资源
为什么两次连接不可行?
对于两次连接时:
客户端A给服务器B发送请求,由于网络时延导致A发送的消息在网络中过久,A重新发送数据给服务器B,B与A完成正常的数据交换后,延时的数据到达服务器,B等待A连接,A已经拿到资源,不回复服务器B会导致B一致处于监听状态。
四次挥手
1.客户端发送fin给服务器请求连接,进入FIN_WAIT_1状态
2.服务器给客户端发送ack,Server进入LAST+ACK状态(不确认是否断开,只表示接收到消息)
3.服务器给客户端发送fin,Server进入LAST_ACK状态(服务器确认断开)
3.客户端发送ack给服务器进行确认,客户端进入TIME_WAIT状态,Server进入CLOSED状态
#linux下抓包
yum install tcpdump
tcpdump -nn -i eth0 port 80
curl url —> 例如 curl www.baidu.com:80
网络层(ip)
ip地址点分字节,ip地址与子网掩码进行按位与操作得到网络号(网关)
linux路由表:route -n
arp协议,主机获取网关的mac的地址进行广播,网关将自己的mac地址交给主机,主机进行数据与ip地址封装
arp -d 删除的路由中的记录 && curl url
tcpdump -nn -i eth0 port 80 or arp
Http协议的一些基本概念:
HTTP超文本传输协议是一个基于请求与相应模式的,无状态的,应用层协议,常基于TCP的连接
http协议内容:请求行、请求头、空行、数据
客户端请求消息:请求方法,URL,协议版本为请求行,请求头部,头部字段名,值,请求数据
服务器端响应消息:状态行,消息报头,空行,响应正文
URI:统一资源标识符 访问资源的命名机制,存放资源的主机名、资源的名称由路径决定
URL:统一资源定位符 URN:统一资源命名
Http:的方法有:
1.GET为获取资源数据get方法用于请求指定的页面信息,并返回请求消息的主体
2.POST为提交资源数据post方法用于向指定的资源提交数据
3.PUT为更新资源数据
4.DELETE为删除资源数据
5.HEAD为读取资源的元数据
6.OPTIONS为读取资源多支持的所有请求方法
7.TRACE为回显服务器收到额请求
8.CONNECT为保留将来使用
多个socket对应一个进程:多路复用器:EPOLL
netty需要了解线程池相关知识