본문 바로가기

CS 전공지식/네트워크

[네트워크] OSI 7계층(TCP)

이전 시간에는 전송 계층과 전송 계층의 프로토콜 중 하나인 UDP에 대해 알아봤습니다.

그럼 오늘은 전송 계층의 또 다른 프로토콜인 TCP에 대해 알아보겠습니다!

 


TCP

TCP는 연결형 프로토콜로 송신 측과 수신 측이 서로 연결을 확인 한 뒤 데이터를 전송합니다. 또한 신뢰성/정확성이 보장되는데 이는 데이터가 목적지에 안전하게 전달되는 것을 의미합니다. 신뢰성과 정확성을 보장하기 위해 UDP보다 헤더가 훨씬 복잡하며, 연결하거나 연결을 끊기 위해서 3-way handshaking, 4-way handshaking 방법을 사용합니다.

 

- 세그먼트

전송 계층 - TCP 헤더

위의 그림은 TCP헤더를 상세히 나타낸 그림입니다.

아래 표는 각 영역의 역할을 정리한 것입니다. 밑줄 친 부분을 중점으로 보시면 됩니다.

필드 역할
송신 측 포트 번호 데이터를 보내는 프로세스의 포트 번호
수신 측 포트 번호 데이터를 받는 프로세스의 포트 번호
시퀀스 번호 송신측이 수신측에게 몇번째 데이터인지 알려주는 영역
ACK 번호(응답 번호) 수신측이 송신측에게 몇번째 데이터를 수신했는지 알려주는 영역
HLEN TCP 헤더의 크기
예약 영역 나중에 사용하기 위해 남겨둔 예비 영역
제어 비트 각 1비트씩 총 6비트로 구성되어 있으며 연결 정보가 기록된 영역
윈도우 크기 수신 측 버퍼 크기를 지정할 때 사용하는 영역
체크섬 오류를 검출하기 위한 용도
긴급 포인터 긴급 데이터를 처리하기 위한 영역, 제어비트에 URG 비트가 설정된 경우에만 유효
옵션 TCP 기능을 확장할 때 쓰는 가변 영역

각각 1 비트 영역으로 총 6개가 있고, 각 위치를 "1"로 설정하면 해당 제어 비트를 사용하겠다는 의미입니다.

제어 비트 종류 역할
URG 긴급 포인터가 유효하다는 것을 의미
ACK 상대방으로부터 데이터를 받았다는 것을 알려주는 비트
PSH 수신측 애플리케이션에 버퍼링된 데이터를 상위 계층에 즉시 전달할 때 사용
RST 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답용으로 사용
SYN 연결 요구를 할 때나 양쪽이 보낸 최초의 데이터에만 이 비트가 설정되어 있어야 함. 즉 일련의 세그먼트 중 가장 먼저 보내지는 데이터는 이 비트가 설정되어 있음
FIN 세션 연결을 종료시킬 때 사용

 


- 흐름 제어와 오류제어

흐름 제어의 방법으로는 Stop and Wait과 Sliding Window가 있고, 체크섬을 통해 오류 검출 시 오류 제어 방법으로는 Stop and Wait ARQ, Go-Back-N ARQ, Selective-Repeat ARQ가 있습니다. "어디서 본 것 같은데"라는 생각이 드실 수 있는데 데이터 링크 계층에서 설명한 것과 동일합니다! (따라서 여기서는 각 방법에 대해 자세히 설명하지 않겠습니다. 데이터 링크 계층 게시물을 참고해주세요!)

 

[네트워크] OSI 7계층(데이터 링크 계층)

이전 시간에는 물리 계층에 대해 알아봤습니다. 오늘은 물리 계층과 데이터를 주고 받는 데이터 링크 계층에 대해 알아보겠습니다. 데이터 링크 계층 데이터 링크 계층은 Mac 주소가 사용되며,

soso-yw.tistory.com

 

"왜 데이터링크 계층과 전송 계층이 이중으로 같은 일을 하는 거지?"라는 궁금증이 생기실 수도 있는데 이 궁금증을 해결하기 위해서는 전체적인 데이터 전송 흐름을 살펴봐야 합니다.

WAN과 LAN

위의 그림은 전체 네트워크를 WAN과 LAN으로 구분한 그림입니다. 그림에는 라우터가 3개뿐이지만 실제로는 수많은 라우터들이 연결되어 있어 다른 LAN에 있는 컴퓨터와 데이터를 주고받을 때 많은 라우터들을 거치게 됩니다.

만약 집 LAN에 연결되어 있는 컴퓨터에서 학원 LAN에 연결되어 있는 컴퓨터에게 데이터를 전송할 때 집 LAN -> 수 많은 라우터 -> 학원 LAN의 흐름으로 데이터가 전달될 것입니다. 이때 각 LAN안에서는 이더넷(2계층)과 TCP(4계층)가 사용되고 라우터끼리는 HDLC프로토콜(2계층)이 사용됩니다. 이더넷은 흐름/오류제어를 하지 않는 2계층 프로토콜이고, HDLC는 흐름/오류제어를 하는 2계층 프로토콜입니다. 왜 이렇게 복잡하게 작동될까요?

스위치와 라우터

이는 라우터가 3계층에 해당하는 장비이기 때문입니다. 다시 말해서 라우터는 1계층부터 3계층에 해당되는 데이터까지만 확인할 수 있는 장비라는 뜻입니다. 만약에 라우터끼리 데이터를 전송할 때 이더넷과 TCP가 사용된다면 4계층에 해당되는 TCP의 헤더 부분은 라우터가 확인할 수 없습니다. 그래서 라우터끼리 흐름/오류제어를 할 수 없게 되는 단점이 발생합니다.

이를 해결하기 위해 라우터끼리는 라우터가 확인할 수 있는 2계층에서 흐름/오류제어를 하는 것이고, 이를 HDLC프로토콜이 담당합니다.

 


- 3-way handshaking

전송 계층 - TCP 3-way handshaking

3-way handshaking은 데이터를 전송하기 전에 두 컴퓨터를 연결하는 과정으로 제어 비트 SYN, ACK이 사용됩니다.

위의 그림에서 client가 송신 컴퓨터고 server가 수신 컴퓨터일 때, client가 먼저 SYN를 설정한 세그먼트를 server에 보내 데이터 송수신이 가능한지 물어봅니다. server에서는 데이터 송수신이 가능하다는 의미의 ACK과 client도 데이터 송수신이 가능한지를 묻는 SYN을 같이 설정해 보냅니다. client는 자신도 송수신 준비가 되었다는 의미도 ACK을 설정해 보냅니다.

위의 3과정이 완료되면 두 컴퓨터가 서로 송수신 준비가 되었다는 것을 의미하고, 안전하게 데이터가 전송될 수 있습니다.

 


- 4-way handshaking

전송 계층 - TCP 4-way handshaking

4-way handshaking은 두 컴퓨터가 연결을 끊기 위한 과정으로 제어 비트 FIN과 ACK가 사용됩니다.

client가 연결 종료를 요청하는 의미로 FIN 제어 비트를 설정해서 보냅니다. server는 ACK을 통해 FIN에 대한 응답을 합니다. 이후 server도 FIN를 설정한 세그먼트를 보내고 client는 FIN에 대한 응답으로 ACK을 설정해서 보냅니다.

위의 4 과정이 완료되면 두 컴퓨터 사이에 더 이상 데이터를 보내지 않겠다는 의미가 됩니다.

 


지금까지 TCP 프로토콜에 대해 설명했습니다.

다음 시간에는 세션 계층과 표현 계층에 대해 알아보겠습니다!