《Python網絡編程》學習筆記--從例子中收穫的計算機網絡相關知識

       從以前筆記的四個程序中(http://www.cnblogs.com/take-fetter/p/8278864.html),咱們能夠看出分別使用了谷歌地理編碼API(對URL表示地理信息查詢和如何獲取JSON數據都進行的封裝)、URL(標識了可經過HTTP獲取的文檔)、HTTP(支持面向文檔的命令,例如GET,使用了原始的TCP/IP套接字,也是在這裏遇到了一點麻煩,須要自行處理301錯誤)、TCP/IP套接字(只處理字符串的發送和接收)。層層深刻,Python對各網絡層都提供了很是全面的支持。顯然也能看出來,越底層程序的質量也明顯隨之降低。高層的網絡協議一般會將其底層網絡細節隱藏(相似於OSI參考模型中下層爲上層提供服務的概念)。正確實現網絡協議並不是易事(類如咱們遇到的301問題和須要使用代理訪問的問題),所以咱們儘量使用標準庫和第三方庫來實現(造輪子難啊:( )。html

  socket()API之下的幾層:Transmission Control Protocol (TCP)、Internet Protocol (IP)、最底層的鏈路層(書上是這麼寫的,可是按照OSI參考模型應該還有物理層吧)python

  書中在第一章中還提到了如下相關知識:git

  • 編碼與解碼

   Python3對字符串和底層字節序列作了明顯的區分(字節Byte(8位二進制數)和字符串(包含Unicode字符)),兩者的轉化使用編碼(字符串to字節,encode()方法)和解碼(字節to字符串,decode()方法)操做。github

  例如書中的程序我作了一點簡單的改變網絡

  

#!/usr/bin/env python3
# Foundations of Python Network Programming, Third Edition
# https://github.com/brandon-rhodes/fopnp/blob/m/py3/chapter01/stringcodes.py

if __name__ == '__main__':
    # Translating from the outside world of bytes to Unicode characters.
    input_bytes = b'\xff\xfe4\x001\x003\x00 \x00i\x00s\x00 \x00i\x00n\x00.\x00'
    input_characters = input_bytes.decode('utf-16')
    print(repr(input_characters))

    # Translating characters back into bytes before sending them.
    output_characters = 'We copy you down, Eagle.\n'
    output_bytes = output_characters.encode('utf-8')
    with open('eagle.txt', 'wb') as f:  # wb以二進制形式寫入文件eagle.txt
        f.write(output_bytes)
        print(output_bytes)

輸出結果爲socket

'413 is in.'
b'We copy you down, Eagle.\n'

而寫入文件的結果爲ide

We copy you down, Eagle.
  • 網際協議Internet Protocol (IP)與IP地址

    將主機名轉換爲IP地址編碼

import socket

if __name__ == '__main__':
    hostname = 'www.qq.com'
    addr = socket.gethostbyname(hostname)
    print('The IP address of {} is {}'.format(hostname, addr))

    IPv4(32位二進制數)spa

    特殊的IP地址段 127.*.*.*(預留地址段) 10.*.*.*  172.16-31.*.* 192.168.*.* (私有子網 private subnet)計算機網絡

     IPv6(32*4=128位二進制數)

  • 路由
  • 數據包分組(DF標記,是否對大於MTU的數據包進行分組)

   補充下 IP頭部20字節,TCP頭部20字節,UDP頭部8字節,以太網的最大容量(包含頭部)共1500B

   關於計算機網絡部分的知識,仍是不細講了,回顧一下基礎知識。

相關文章
相關標籤/搜索