应用层协议调用传输控制层 (包含长连接和短链接,http:1.0短链接,http:1.1长连接)
传输控制层有TCP、UDP两种协议 TCP干的事情,面向连接的、可靠的传输 什么是连接:双方可以开辟资源以及切换状态 连接的含义: (1)创建连接,三次握手 传输控制层捏的数据包里含syn信号,由TCP进行处理, 即客户端发给服务端一个syn信号,服务端接收后发给客户端一个syn+ack信号, 表示自己确定搜到了,第三次客户端发给服务端一个ack信号,表示自己收到客户端的确认了 在liunx中可以使用
netstat -natp
查看网络连接,确认网络连接状态 三次握手后。网络会进入到ESTABLISHBD 这个状态。 内存中会创建资源 进入数据包后会和四元组的规则匹配,将数据包转交给进程。 这个条目对程序员来说就是socket socket: 两个app之间互连的过程,app读取的是该app客户端开辟资源中的接收队列,想写的时候是写在该app客户端内核开辟资源中的发送队列,这个会出现问题可能对方app没有发送数据,该app读取的时候读的是个空值,或者有nio阻塞的情况发生,读到一个0值。但可以看出app读出的都是自身内部和自己这个内核的队列进行交互。而内核是如何进行和另一个app内核交互,这个由内核自身协议完成。 程序选择io模型决定是阻塞还是io阻塞还是多重录用器 socket:套接字 套接字,就是插座插头,需要俩个东西,比如两个人一起玩才行 套接字(四元组)内包含源ip+port(总共可分配的有65535个) 目ip+port 绝对唯一的连接。 有两台主机,分别两个网卡IPA,IPB,起两个服务,一个客户端,一个服务端,两个服务发起连接要有一个监听的socket。什么是监听socket,本地ip地址3306无论外来任何地址任何端口都转给进程。
此时小明同学就会问了:客户端和服务端可以建立的连接是多少个 客户端端口号0:,服务端端口号80 客户端端口号1:服务端端口号:80 依次排开,改变的就是客户端端口号所以建立连接数就是65535个 客户端不变,服务端端口号改变又能建立65535个连接。 这个时候小明又问了:那我想建立十万个连接怎么弄。 那就再加一块网卡,一个不够加俩。这连接不久建立起来了嘛 (2)数据传输 (3)四次挥手 客户端想和服务端分手说拜拜了, 客户端会先给服务端一个消息,fin信号说我要分手,服务端给客户端回个消息fin+ack,哼,你居然要分手,然后越想越气,老娘不过了,又回了一个fin,这日子没法过了,老娘确定了要跟你分手。这个时候客户端就美滋滋的回个确认信号ack,得勒,拜拜了您内,打游戏去了。 三次握手、四次挥手验证
//tchpdump tcp抓取
//-nn 以数值形式抓取 -i 抓取的是哪个端口的
//eth0 以太网0号网卡,即本地连接。
//port --端口号80
tcpdump -nn -i eth0 port 80
该服务器获取请求
//curl 命令可以抓取请求 请求一个页面
//自动将www.baidu.com转换为ip地址
curl www.baidu.com 80
会自动获取一个页面 运行抓包程序
再运行抓包请求程序
//curl 命令可以抓取请求 请求一个页面
//自动将www.baidu.com转换为ip地址
curl www.baidu.com 80
会在抓包页面获取到ip地址请求过程 解析 从本机192.168.150.11.58254发送请求[S] seq,到百度请求182.61.200.7.80 length 0 这个包的大小为0 对方发送确认消息182.61.200.7.80>192.168.150.11.58254[S.] 这个点 . 就是ack 抓取的包大小为0 然后本地再给百度服务端再发个包大小为0 三次握手确认联系
后面length 168 就是已经获取到东西了 传输数据
最后四段是在四次挥手
|