2021. 11. 26. 17:40ㆍNetwork
TCP/IP 설명
- 전송 조절 프로토콜인 TCP(전송 제어 프로토콜)와 인터넷 프로토콜인 IP(인터넷 프로토콜)로 이루어져 있는 프로토콜.
- 인터넷 환경에서 정보 전송을 위해 쓰이는 프로토콜.
- 인터넷에서는 데이터가 전송될 때, 패킷이라는 작은 단위(데이터 블록)로 나뉘어 전송됨.
- TCP는 데이터의 추적/제어, IP는 데이터의 주소 지정/전달을 담당함.
TCP (Transmission Control Protocol) 설명
- TCP는 OSI 네트워크 계층 모델 중 전송 계층에서 사용하는 프로토콜로 가상회선 방식으로 패킷을 교환함.
- 장치들 사이에 연결과 데이터의 전송/제어 기능을 통해서, 데이터 전송의 신뢰성을 보장함.
- 체크섬(check sum, 데이터의 손상 여부 점검) 필드에서 패킷 손실의 문제를 보장해줌.
- point to point 연결 방식으로 전이중/양방향(Full-duplex)에서 데이터 전송이 가능.
- 재전송/시간 제한 기법, 순서번호(syn)와 확인번호(ack)를 사용하여 패킷의 흐름/혼잡/순서 등을 제어함.
IP (Internet Protocol) 설명
- IP는 OSI 네트워크 계층 모델 중 인터넷 계층에서 사용하는 프로토콜.
- 호스트의 주소지정, 패킷 분할 및 조립 기능, 데이터 전달을 담당.
- `신뢰성(에러제어)` 및 `흐름제어` 기능이 전혀 없음(신뢰성을 확보하려면 IP 계층 위의 TCP와 같은 상위 트랜스포트 계층에 의존)
- 모든 상위 계층 프로토콜들(TCP,UDP,ICMP,IGMP 등)이 IP 데이타그램에 실려서 전송됨.
TCP/IP 계층 구조 설명
- 1계층, 네트워크 액세스 계층(Network Access Layer or Network Interface Layer) :
하드웨어 적인 요소를 담당한다. MAC 주소를 이용해 신뢰성 있는 전송을 보장한다. (OSI 7 계층에서 1,2 계층 역할.)
MAC 주소는 이더넷과 와이파이 같은 IEEE 802 정의 된 네트워크를 말함.
- 2계층, 인터넷 계층(Internet Layer) :
IP가 있는 레이어로 IP 헤더(원천지, 목적지 정보)를 붙여서 패킷을 만들고 전송하는 역할을 한다. (OSI 7 계층에서 3계층 역할.)
- 3계층, 전송 계층(Transport Layer) :
TCP가 있는 레이어로 두 지점의 신뢰성 있는 데이터 전송 역할을 한다. IP와 PORT를 이용해 프로세스와 통신한다. (OSI 7 계층에서 4계층 역할.)
포트를 통하여 Application 레이어가 TCP에게 데이터를 전송한다. 각각의 포트에 프로토콜을 지정할 수 있다.
예를 들어, HTTP는 80이라는 포트를 사용한다. 이로써, TCP는 어디에서 데이터가 오는지를 정확히 알 수 있다.
포트를 통해 받은 데이터들은 패킷이라는 작은 단위로 쪼개진다. 이 패킷들은 제각각 가장 빨리 전송될 수 있는 인터넷 루트를 찾아 떠난다.
각각의 패킷들은 TCP header에 어떤 순서로 재조합 할지에 관한 정보를 가진다.
- 4계층, 응용 계층((Application Layer) :
응용프로그램들이 이용 할 수 있는 인터페이스를 제공한다. 대표 프로토콜로는 HTTP, FTP, SMTP 등이 있음. (OSI 7 계층에서 5,6,7계층 역할.)
OSI 7 계층 구조 설명
- 1계층, 물리층(Physical Layer) :
전기적, 기계적인 물리적 연결을 담당함. 순수 데이터 전달 역할만 함.
- 2계층, 데이터링크 계층(Data Link Layer) :
두 지점간의 신뢰성있는 전송을 보장. Mac주소(각 기기마다 가지고 있는 고유 주소)를 이용해 두 지점을 확인. Frame 이라는 데이터 단위를 사용함.
- 3계층, 네트워크 계층(Network Layer) :
여러 지점을 거칠 때 경로를 찾아줌.(라우팅) IP Header가 여기서 붙음.
- 4계층, 전송 계층 (Transport Layer) :
두 지점간의 신뢰성 있는 데이터를 주고 받게 해주는 역할. TCP헤더가 여기서 붙음.
- 5계층, 세션 계층 (Session Layer) :
두 지점간의 프로세스 및 통신 상태를 관리하는 역할. 포트번호를 기반으로 통신 세션을 구성함.
- 6계층, 표현 계층 (Presentation Layer) :
인코딩 및 데이터 형식의 차이를 조절함. (데이터 암호화 & 복호화, 데이터 변환 등이 이루어짐) 데이터를 어떻게 보여줄지를 처리 하는 계층.
- 7계층, 응용 계층(Application Layer) :
우리가 사용하는 응용 서비스나 프로그램이 작동하는 계층.
TCP 패킷(세그먼트)의 구조
TCP flag(URG, ACK, PSH, RST, SYN, FIN) 설명
- SYN( synchronization ) 연결 요청 플래그
세션을 성립할 때 가장먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용됨.
통신 시작 시 초기에 시퀀스 번호를 보내고 세션을 연결하기 위한 플래그
- ACK( Acknowledgement ) 응답 플래그
받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK를 보냄.(일반적으로 +1 하여 보냄)
ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송함.
송신측 으로부터 패킷을 잘 받았다는 걸 알려주기 위한 플래그.
- PSH( Push ) 넣기 플래그
대화형 트랙픽에 사용되는 것으로 버퍼가 채워지기를 기다리지 않고 데이터를 전달함.
버퍼링 없이 7 Layer Application Layer의 응용프로그램에게 메시지를 바로 전달하는 플래그.
- FIN( Finish ) 연결 종료 플래그
더 이상 전송할 데이터가 없음을 의미함.
세션 연결을 종료시키겠다는 플래그.
- RST( Reset ) 연결 재설정 플래그
비정상적인 세션을 끊기위해 연결을 재설정 하는 플래그
- URG( Urgent ) 긴급 데이터 플래그
긴급한 데이터의 우선순위를 다른 데이터의 우선순위를 높여 긴급하게 전달하는 플래그
EX) ping 명령어 실행 도중 Ctrl+c 입력
TCP 3,4-handshake의 개념
- 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제함.
TCP 3,4-handshake의 구조
TCP Connection (3-way handshake)
- 먼저 open()을 실행한 클라이언트가 SYN을 보내고 SYN_SENT 상태로 대기한다.
- 서버는 SYN_RCVD 상태로 바꾸고 SYN과 응답 ACK를 보낸다.
- SYN과 응답 ACK을 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK를 보낸다.
- 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.
TCP Disconnection (4-way handshake)
- 먼저 close()를 실행한 클라이언트가 FIN을 보내고 FIN_WAIT1 상태로 대기한다.
- 서버는 CLOSE_WAIT으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청한다.
- ACK를 받은 클라이언트는 상태를 FIN_WAIT2로 변경한다.
- close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트에 보내 LAST_ACK 상태로 바꾼다.
- FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME_WAIT에서 일정 시간이 지나면 CLOSED된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.
TCP Socket Flow