⚠️ 들어가기 앞서
경북대학교 컴퓨터학부 COMP0414-001 컴퓨터망 과목을 공부하며 정리한 글입니다.
Transport layer (전송 계층)은 송신자와 수신자를 연결하여 데이터를 주고받을 수 있도록 한다고 하였다. 전송 계층에서 사용되는 프로토콜은 TCP와 UDP가 있는데 여기에 대해서 자세히 알아본다!

TCP는 연결 기반의 프로토콜이며, 신뢰성 있는 데이터 전송을 지원하며, 흐름 제어와 혼잡 제어 등을 지원한다.
TCP의 특징은 다음과 같은 것들이 있다.
connection-oriented) : 데이터를 주고받기 전에 연결을 수립하는 과정이 필요하다. 이 때 handshaking이 사용된다. (나중에 다룸)flow control) : 송신 속도에 비해 수신 속도가 너무 느리지 않도록 송신 속도를 조절함congestion control) : 패킷 수가 너무 많아 queueing delay 또는 packet loss가 생기지 않게 한다.TCP에는 데이터를 암호화하는 기능을 지원하지 않는다.
이 점을 보완한 것이 Transport Layer Security TLS이다.
TLS는 3가지를 제공한다.
암호화(encryption): 제3자로부터 전송되는 데이터를 숨긴다.인증(authentication): 정보를 교환하는 당사자가 요청된 당사자임을 보장한다.무결성(integrity): 데이터가 위조되거나 변조되지 않았는지 확인한다.TCP의 서버, 클라이언트에서 연결을 수립하고 데이터를 주고받는 과정을 간단히 파이썬 코드로 작성해 보자.
client
from socket import *
serverName = 'serverName'
serverPort = 12000
# TCP 연결을 수립
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
# 데이터를 보내고 받음
sentence = input("Input lowercase Sentence : ")
clientSocket.send(sentence.encode())
modifiedSentence = clientSocket.recv(1024)
print("From server ", modifiedSentence.decode())
# 연결 종료
clientSocket.close()
server
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind((‘’,serverPort))
serverSocket.listen(1)
print ("The server is ready to receive")
while True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024).decode()
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence.encode())
connectionSocket.close()

UDP는 비연결형 프로토콜로서, 데이터의 신뢰성을 보장하지 못하는 대신 속도가 빠르다.
비연결형 프로토콜데이터의 신뢰성보다는 연속성(성능)이 우선시될 때 UDP를 사용한다.
UDP 서버와 클라이언트가 서로 데이터를 주고받는 과정을 간단히 파이썬 코드로 작성해 보자.
client
from socket import *
serverName = 'hostname'
serverPort = 12000
# UDP 소켓을 만듦
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input("Input lowercase Sentence : ")
# 서버이름과 포트번호를 이용해 서버에게 데이터를 전송
clientSocket.sendto(message.encode(), serverName, serverPort)
# 데이터를 받아서 출력
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()
server
from socket import *
serverPort = 12000
# UDP 소켓을 만듦
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind((", serverPort))
print("Ready to receive")
while True:
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.decode().upper()
serverSocket.sendto(modifiedMessage.encode(), clientAddress)