客户端:
应用层 dns解析 http 超文本传输协议 ,ipv4 ipv6 ,
传输层 socket tcp 协议
网络层:ip地址
物理层:网线 ,光纤 电话线
服务器端:
网络层:ip解析
传输层 tcp协议 解析
应用层:web 服务器解析 http
应用服务器:逻辑处理 ,io 操作 ...
然后 再 原路返回
互联网中网站的数据传输
特点
1.支持客户端、服务器模式
2.灵活简单快速
http协议几乎可以传输任意格式的数据(数字,字符串,json(列表元祖,字典)字节流(图片,文件,))
3.http1.0 无连接 发布了6版 向服务器请求 ,响应 后 断开,下次连接 不知道 啥时候 ,既连既断。多次访问,效率低。
http1.1 支持持久连接 。多长时间 断开,或 关闭 客户端。
4.无状态
不记录用户的访问信息(时间,用户,ip)。与cookies的 差别。http 本身不记录访问信息。浏览器做了。
数据传输规则
1 http请求
格式
请求行
请求报头
[空行]
请求正文
请求方法:
1.0方法
GET 获取URI所标识的所有资源 。 uri= :协议名称://域名.根域名/目录/文件名.后缀POST 提交一定的附加数据用以获取相应的返回
1.1扩充
HEAD 获取URI所标识的所对应的响应消息报头PUT 获取服务器的一个存储资源
DELETE 删除uri所标识的服务器端资源
TRACE 用于测试和诊断
CONNECT 保留的将来用
OPTIONS 请求服务器新能,用来查询服务器资源相关的信息
请求行格式: GET /index.html HTTP/1.1
请求头格式: 提供了请求的具体信息
Host: www.baidu.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64;rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
请求体 : 发送get请求参数,和post请求提交的内容
2 http响应
响应行
响应报头
[空行]
响应正文
响应码
1xx 提示信息,标识请求已经接受,正在处理
2xx 成功-访问已经成功,正确解析受理
3xx 重定向 完成任务要进行进一步的请求操作
4xx 客户端错误
5xx 服务器端错误
200 OK 标识访问成功
400 Bad Request 客户端请求语法有误,服务器不理解
401 请求未经授权
403 服务器收到请求,但是拒绝提供服务
404 请求的资源不存在或者URL错误
500 服务器端发生不可预期错误
503 服务器暂时不能处理请求,一段时间后可能可以
响应行格式: HTTP/1.1版本 200响应码 OK 信息
响应报头格式: 同请求报头
响应内容: 将客户端请求得到的内容发送给客户端
超时检测
使用settimeout函数
如果到了指定的时间仍然没有连接请求则不再等待
产生time out 异常
sockfd.settimeout(3)
在后续代码无需等待的IO也能执行时我们可以使用超时检测
防止持续等待
设置select 超时
select 函数的第四个参数即为超时时间
select([],[],[],3)
广播
IP 分类
A(1.0.0.1 - 126.255.255.255)
B(128.0.0.1 - 191.255.255.255)
C(192.0.0.1 - 223.255.255.255)
D(224.0.0.2 - 239.255.255.255)
E(240.0.0.1 - 255.255.255.255)
当一个网络端向广播地址发送内容时,在该网段内所有的客户端都能收到消息。
广播所用的socket套接字为 数据报套接字
发送端
接收端
(先启动接收端)