[컴퓨터 네트워크] Transport Layer

서지혜·2023년 7월 16일
0

TIL

목록 보기
15/22

🧭 CS Study - 컴퓨터 네트워크

🚩 주제 : Transport Layer

📘 참고 서적 : TCP/IP 쉽게, 더 쉽게 - 리브로웍스

Transport Layer

트랜스포트 계층은 IP와 포트번호를 사용하여 프로그램끼리 통신 가능하게 하는 계층이다. 인터넷 계층을 통해 컴퓨터에서 컴퓨터로 데이터가 전송되면 트랜스포트 계층은 해당 데이터를 프로그램에게 전달하는 역할을 한다. 이때 프로그램을 구분하는 것이 포트번호이다.

포트번호

컴퓨터로 전송된 패킷이 어플리케이션 계층의 어떤 프로그램과 통신하는지 구분하기 위해서 트랜스포트 계층에서는 포트번호를 사용한다.
포트번호의 범위는 0~65535까지 사용할 수 있는데 그중 0~1023을 well-known port, 1024~49151을 registered port, 49152~65535를 dynamic port라고 한다.
well-known port는 서버에서 요청을 받기위해 대기하는 포트번호로 사용한다. registered port는 특정 프로그램 및 프로토콜이 사용하도록 지정된 포트번호이다. dynamic port는 서버가 클라이언트 프로그램을 식별하기 위해 사용한다. dynamic port 번호는 필요할 때마다 동적으로 할당되기 때문에 클라이언트에게 부여되는 포트번호는 때마다 다르다.

클라이언트와 서버의 접속 절차
1. 웹 브라우저가 사용할 포트번호 할당 받기
2. 클라이언트에서 서버의 well-known 포트로 접속 요청보내기
3. 서버가 접속을 허용하고 클라이언트는 포트번호 반납

이때 서버로 들어오는 요청은 여러 IP의 PC에서 보내지게 되는데, 서버는 각각을 구별하기 위해 IP와 포트번호를 묶어서 통신중인 프로그램을 식별한다.

프로토콜

트랜스포트 계층에서 사용하는 프로토콜은 대표적으로 TCP와 UDP가 있다. TCP는 통신 흐름제어, 오류제어, 혼잡제어 기능을 수행한다. UDP는 흐름제어, 오류제어, 혼잡제어 기능이 없지만 속도가 빠르다는 특징이 있다.

TCP(Transmission Control Protocol)

TCP는 Application Layer로부터 내려온 데이터에 TCP 헤더를 붙인 Segment라는 단위로 데이터를 전송한다. TCP 헤더에는 송신지의 포트번호, 수신지의 포트번호, 일련번호(seq), 확인 응답 번호(ack), control bit등이 포함된다.

http://www.ktword.co.kr/test/view/view.php?m_temp1=1889

control bit은 통신을 제어하기 위해 통신 상태를 저장하는 플래그 역할을 한다.
각각은 1bit이기 때문에 ON/OFF로 구분한다.

CWR : 통신이 혼잡하여 통신량을 줄여야함
ECE : 통신이 혼잡하여 수신할 수 없는 가능성을 보임
URG : 긴급 포인터에서 지정한 데이터를 즉시 처리해야함
ACK : 이전 동작을 확인했음을 알림
PSH : 수신 데이터를 즉시 Application Layer에 전송해야함
RST : 접속 강제 중단
SYN : 접속 시작
FIN : 통신 종료

TCP에서 통신을 위해서는 우선 커넥션 연결을 수행해야한다. 이를 위해 TCP는 3-way handshake라는 방식을 사용한다.
클라이언트에서 서버에 SYN을 ON으로 한 패킷을 전송하면 서버는 패킷을 잘 수신했기 때문에 ACK와 접속 허용 의미를 담은 SYN을 ON으로 하여 패킷을 전송한다. 그럼 클라이언트는 해당 패킷을 잘 받았으므로 다시한번 ACK를 ON으로한 패킷을 전송한다.
통신을 종료할 때는 SYN대신 FIN을 ON으로 하여 패킷을 전송한다.

커넥션을 맺을 때는 일련번호와 최대 세그먼트 크기(MSS, Maximun Segment Size)를 합의하고 데이터를 전송한다. 서버와 클라이언트가 각각 원하는 MSS를 제시하고 더 작은 값으로 MSS를 합의하는 방식이다.

데이터 송수신시에 일련번호와 확인 응답 번호는 주고받는 데이터의 바이트 수만큼 더해지는 방식이다.
처음 커넥션을 맺을 때의 일련번호, 확인 응답 번호는 1씩 증가하고 그 이후에는 송수신한 바이트만큼 더해진다. 그래서 아래와 같이 계산할 수 있다.
일련번호-1 = 송신한 바이트 수
확인 응답 번호-1 = 수신한 바이트 수

송신 실패 여부 판단에는 일정 시간이 지날 때까지 ACK가 오지 않으면 재전송 과정을 반복하는 절차가 있다. 이에 대한 자세한 내용은 다음에 다시 정리할 것이다.

수신한 데이터를 일시적으로 보관하는 buffer라는 저장 영역을 가지는데 수신측은 window size에 데이터를 수신할 수 있는 남은 버퍼 크기를 설정하여 송신측으로부터 데이터를 얼마나 받을 수 있음을 알린다. 이를 통해 흐름 제어를 수행한다.
만약 버퍼가 가득 찰 경우에는 window size가 0이 되는데 이 경우 데이터 전송을 우선 멈추고 송신측이 window probe라는 패킷을 수신측에 보내어 전송 재개 시점을 알린다. 수신측은 남은 버퍼 크기를 확인하며 통신 재개를 결정한다.

UDP(User Datagram Protocol)

UDP는 오류 제어와 흐름제어를 하지 않기 때문에 패킷이 중간에 손실되거나 버퍼가 넘칠 수 있지만 빠르게 전송작업을 수행하기 때문에 약간의 손실이 생겨도 큰 문제가 없는 영상이나 음성 서비스 같은 것을 전송할 때 사용한다.

UDP의 헤더는 송신지의 포트번호, 수신지의 포트번호, 패킷 길이, 체크썸으로 이루어진다. 혼잡제어나 흐름제어, 오류제어가 없기 때문에 헤더가 간단하다.

http://www.ktword.co.kr/test/view/view.php?m_temp1=323

UDP에는 브로드캐스트와 멀티케스트 기능이 있다. 하나의 패킷을 여러 수신자에게 전달할 수 있다. 이는 네트워크 내의 컴퓨터나 통신 장비와 정보를 공유할 때 사용한다.
UDP는 속도가 빠르지만 신뢰성이 없다는 단점이 있기 때문에 온라인 게임과 같은 속도가 중요한 프로그램은 UDP를 사용하며 신뢰성을 제공하는 기능을 하는 프로그램을 Application Layer에서 실행하여 단점을 보완한다.

참고자료
https://en.wikipedia.org/wiki/Registered_port
https://snowdeer.github.io/common-sense/2018/02/01/understanding-about-port/
https://mangkyu.tistory.com/15
https://benlee73.tistory.com/186
https://forward-movement.tistory.com/188

profile
개발자가 되고 싶은 감자

0개의 댓글

관련 채용 정보