일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- dfs #bfs #이진트리 #파이썬 #리트코드
- AsyncTask #doinbackground #스레드 #thread #android #안드로이드
- dfs #그래프 #graph #python #leetcode #course #schedule
- leetcode #subsets #dfs #itertools #python
- exoplayer #mediaplayer #엑소플레이어 #안드로이드 #android
- dfs #bfs #leetcode #python
- 코틀린 #Do it #깡샘 #안드로이드
- leetcode #python #dfs #재귀
- 다익스트라 #dijkstra #leetcode #파이썬 #python #algorithm #787
- 다익스트라 #알고리즘 #bfs #그리디 #다이나믹프로그래밍 #leetcode #python
- dfs #python #leetcode
- python #백준 #9375 #패션왕 #신해빈
- dfs #bfs #트리구조 #이진트리 #leetcode #python #파이썬
- 해시테이블 #heapq #파이썬 #리트코드 #알고리즘
- dfs #bfs #트리구조 #이진트리 #leetcode #파이썬 #python
- 리트코드 #팰린드롬 #파이썬
- python #백준 #2580 #스도쿠 #dfs #백트래킹
- 백준 #파이썬 #bfs #백트래킹 #1697 #숨바꼭질
- dfs #leetcode #python #graph #그래프
- final #java #자바 #안드로이드
- handler #looper #thread #runnable #핸들러 #루퍼 #스레드 #러너블
- dfs #leetcode #python
- dfs #python #leetcode #combination
- 2004 #조합 0의 개수 #백준
- dfs #이진트리 #트리구조 #직렬화 #역직렬화 #파이썬 #리트코드 #leetcode #python
- 파이썬 #zip
- gcd #최대공약수 #백준 #2981 #검문
- 아스테리스크 #Asterisk #파이썬
- Python #leetcode #dfs #그래프 #백트래킹
- context #android #getApplicationContext #activity #생명주기 #lifecycle
- Today
- Total
멋진 개발자가 되고 싶다
[네트워크] TCP 통신이란? 본문
네트워크는
Network Interface, Internet, Transport, Application
4개의 계층으로 나뉜다.
Transmission Control Protocol의 약자인 TCP는
UDP와 함께 Transport 계층의 대표적인 프로토콜이다.
TCP는 웹이나 이메일같이 데이터가 정확하게 전달되어야 하는 통신에 사용된다.
통신을 맺고 끊는 과정에서 Client와 Server 간에 확인 절차를 거치는데
이러한 특징으로 연결지향(Connection Oriented) 프로토콜이라고 한다.
UDP는 VoIP나 동영상 스트리밍같이 전송 속도가 빨라야 하는 통신에서 사용한다.
TCP와는 달리 연결을 맺지 않고 한 쪽에서 일방적으로 데이터를 보낸다.
따라서 이러한 특징을 비연결지향(Connectionless) 프로토콜이라 부른다.
TCP 통신
TCP는 데이터 전송에 신뢰성을 더하기 위해 데이터를 세그먼트 단위로 분할하고,
전송 속도를 조절하며, 데이터가 제대로 전달되지 않았을 경우 재전송한다.
TCP의 세그먼트는 데이터 본체에 TCP header가 붙은 형태로 구성된다.
TCP header에는 포트번호나 일련번호 등 정보가 포함된다.
TCP 소켓으로 클라이언트와 서버가 연결되는 과정은
커넥션을 3단계에 걸쳐 맺는 3way handshake 방식으로 진행된다.
TCP가 통신을 맺는 과정은 다음과 같다.
1) 클라이언트는 서버에 접속 요청(sync)을 하고 클라이언트는 sync_sent 상태가 됨.
2) 서버는 요청 수락(sync+ack)을 하고 서버는 sync_received 상태가 됨.
3) 클라이언트는 서버에 수락 확인(ack)를 보내고 서버는 established 상태가 됨.
TCP가 연결을 끊는 과정은 4way handshake라고 한다.
TCP가 연결을 끊는 과정은 다음과 같다.
1) 클라이언트가 서버에 연결을 종료(FIN) 플래그를 전송, 클라이언트는 종료 신호를 기다리는 상태(FIN_WAIT1)
2) 서버는 일단 확인(ACK)했다는 메시지를 보내고 자신의 통신이 끝날 때까지 기다리게 함. 서버는 CLOSE_WAIT 상태. 클라이언트는 종료 신호를 기다리겠다는 FIN_WAIT_2로 상태 전환.
3) 서버가 통신이 끝나면 이제 종료해도 된다는 FIN 플래그를 클라이언트에 전달. 서버는 LAT_ACK 상태로 전환, 클라이언트는 TIME_WAIT 상태로 전환.
4) 클라이언트는 연결 종료를 확인했다는 응답(ACK) 플래그를 보냄. 서버 상태는 CLOSED.
'Android > 개발 관련 팁' 카테고리의 다른 글
[Android] getApplicationContext() 이해하기 (0) | 2021.08.02 |
---|---|
[Android] 안드로이드와 파이썬 서버간 TCP 통신하기 (0) | 2021.07.20 |
[Android] Android에서 ExoPlayer 사용하기 (0) | 2021.07.19 |
[Python] http 및 https 서버 구축하기 (0) | 2021.07.15 |
[Android] compileSdkVersion과 targetSdkVersion의 이해 (1) | 2021.07.12 |