第一篇 TCP/IP协议和HTTP协议

TCP/IP协议和HTTP协议

一、TCP/IP协议结构

(1)应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。对于不同种类的应用程序会根据需求使用应用层不同的协议,如邮件传输应用使用了SMTP协议、万维网使用了HTTP协议。

(2)运输层:作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的作用。

(3)网络层:位于TCP/IP协议的第三层,可以进行网络连接的建立和终止以及IP地址的寻找等功能。

(4)网络接口层:最后一层,即第四层,是传输数据的物理媒介,可以为网络层提供一条准确无误的线路。

二、IP协议、TCP协议、UDP协议

  • ip协议就是将数据分割成一小块一小块,再将数据通过ip包发送出去,从一台计算机通过网络发送到另一台计算机,ip包的特点是不保证到达,也不保证顺序到达。
  • tcp协议则是建立在ip协议的基础之上的。tcp协议负责通过握手的方式在两台计算机之间建立可靠的连接,保证数据包都能到达,同时tcp协议会对每个ip包进行编号,以保证数据顺序到达,若是包丢掉了,就会自动重发。
  • udp协议是一个无连接的协议,传输数据之前源端和终端不会建立连接,只需要知道对方的IP地址和端口号,就可以直接发送数据包,因此udp传输的速度非常快。

三、TCP协议与UDP协议的区别

  1. TCP是面向连接的,UDP面向无连接的。
  2. TCP将数据以流的形式发送,UPD则是以报文的形式发送。
  3. TCP时可靠的,UDP是不可靠的。
  4. TCP能保证数据按顺序全部到达,UDP不能保证数据全部到达也不能保证数据按顺序到达。
  5. TCP的效率比UDP效率低。
  6. TCP通常用于对于数据准确性较高的一些网络程序比如:短信,邮箱,文件传输,
    UDP通常用于对数据准确性要求低,但是对速度要求高,比如:网络电话,视频等。

四、三次握手与四次挥手

  • 三次握手:

    1.第一次握手:客户端发送一个带有syn(同步序列编号)包到服务器,进入SYN_SEND状态,并等待服务器确认。

    2.第二次握手:服务器接收到syn包,确认客户的syn,同时发送一个syn包和ack确认信息到客户端,并进入SYN_RECV状态。

    3.第三次握手:客户端收到服务器的syn包和ack确认信息,向服务器发送ack确认信息,完成三次握手,此时客户端和服务器进入ESTABLISHED(TCP连接成功)状态。

    在这里插入图片描述

  • 四次挥手:

    1.第一次挥手:客户端发送一个fin(释放信息)给服务器,用来关闭客户端和服务器之间的数据传输。

    2.第二次挥手:服务器收到fin后,给客户端发送一个ack确认信息。

    3.第三次挥手:服务器将最后的数据传输完后,向客户端发送fin和ack确认信息,关闭连接。

    4.第四次挥手:客户端收到fin后,向服务器发送一个ack确认信息,完成四次握手。

    在这里插入图片描述

五、代码实现TCP/UDP客户端和服务器

  1. TCP服务器的实现

    import socket
    '''
    参数一:指定IP协议使用IP4
    参数二:指定TCP协议
    '''
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定ip地址以及端口号以元祖的形式
    s.bind(('10.36.143.26', 10086))
    
    # 设置最大监听个数
    s.listen(15)
    while True:
    	# 等待客户端连接
    	# 获取创建好的sock,以及对方的地址
    	sock, address = s.accept()
    	print(sock.recv(1024))
    	sock.send("欢迎访问".encode("gbk"))
    
  2. TCP客户端的实现

    import socket
    # 创建socket对象
    sock = socket.socket()
    # 建立连接
    sock.connect(('10.36.143.26', 10086))
    # 发送数据
    sock.send(b"haha")
    # 接收数据
    print(s.recv(1024).decode("gbk"))
    
  3. UDP服务器的实现

    import socket
    '''
    1.导包:import socket
    2.创建socket对象
    3.绑定ip地址以及端口号 bind(address)
    4.等待客户端连接  recvfrom(size) 返回一个data与address
    5.发送数据到客户端  sendto(data,address)
    6.关闭socket,一般处于常开的状态
    '''
    '''
    参数一:指定ip协议
    参数二:指定UDP协议
    '''
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 绑定address(ip地址, 端口号)
    sock.bind(('10.36.143.26', 10086))
    while True:
    	# 接收数据
    	data, address = sock.recvform(1024*1000)
    	print(data.decode("utf-8"))
    	sock.sendto("收到".encode("utf-8"), address)
    	
    
  4. UDP客服端的实现

    '''
    1.导包:import socket
    2.创建socket对象
    3.接收服务器发送的信息 recv(size)
    4.关闭socket,close()
    '''
    import socket
    # 创建socket对象
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 发送数据到指定地址
    sock.sendto(b"hello", ('10.36.143.27', 9581))
    # 接收服务器返回的数据
    data = sock.recv(1024)
    print(data.decode("utf-8"))
    # 关闭连接
    sock.close()
    

六、HTTP协议

  • 概念
      互联网在传输数据的时候需要遵循一定的规范格式,其中我们在使用浏览器浏览网页的时候就需要遵循http协议,中文名称超文本传输协议。http协议主要用来传输超文本、网页等数据。类似的协议还有ftp(主要用来传输文件)。
      我们需要采集指定计算机的数据,那么我们怎么才能找到这台计算机呢?
      http协议使用url来定位计算机和计算机中的数据资源。例如https://blog.csdn.net/weixin_44368274/article/details/106080502就是一个url,在浏览器上输入这串字符就能找到我的这篇博客了。https表示协议的名称,https是http协议的加密版本。blog.csdn.net表示服务器的域名,通过转换可以变成ip地址,可以通过域名在茫茫互联网上定位到csdn的服务器。最后通过后面的参数/weixin_44368274/article/details/106080502找到该服务器web站点下的资源。

  • 常见的状态码及意义:

     200:请求成功
     301:资源被永久转移到其他url
     403:服务器收到请求,但拒绝服务
     404:请求资源(网页)不存在
     500:内部服务器错误

  • get和post请求的区别

     1.get用于获取数据,提交参数在url后面,可见,有长度限制,不安全。
     2.post用于提交数据,提交参数和数据在http body中,不可见,无限制,安全。

  • 从浏览器上输入https://www.qq.com到浏览器上查看网页,背后发生什么,涉及什么网络协议。

     1.先在本地的hosts文件中查找有无这个域名的映射,有则调用这个ip地址,若无则查找本地的DNS服务器,完成域名解析。

     2.浏览器根据解析得到的ip地址向web服务器发送一个http请求。

     3.服务器收到请求进行处理并返回http响应。

     4.浏览器收到响应进行解析,渲染显示。

     5.页面显示完成后,浏览器发送异步请求。

  • http请求格式

      请求行、请求头、请求体
    1.请求行
      协议的版本:HTTP/1.1
      请求的方式:GET/POST/PUT/DELETE
      请求的路径:/

    2.请求头(key,value形式)
      User-Agent:产生请求的浏览器类型
      请求服务器的地址:HOST:主机地址
      cookie信息

    3.请求数据
      如果是get请求,为空
      如果是post请求,会吧数据以key value形式发送请求:name=‘laowang’ & age=20
      如果是put和delete请求,格式是json字符串:{“name”:“laowang”, “age”:20}

    4.空行
      发送回车符和换行符,通知服务器以下不再有请求头

  • http响应格式

    1.响应行
      版本协议:HTTP/1.1
      状态码:200 ok

    2.响应头
      服务器类型
      返回内容的格式
        网页:content-type:text/html;charset=utf-8
        json数据:content-type: application/json
        图片:content-type: image/jpg

    3.响应报文(数据)
      服务器返回的HTML页面

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值